Skip to content

Commit d5b47c5

Browse files
committed
Use RestResponse in the implementation of REST Data Panache endpoints
This makes it possible for things like Kotlin Serialization to work properly. Fixes: quarkusio#44885
1 parent da78b3d commit d5b47c5

File tree

12 files changed

+83
-62
lines changed

12 files changed

+83
-62
lines changed

Diff for: docs/src/main/asciidoc/rest-data-panache.adoc

+13-14
Original file line numberDiff line numberDiff line change
@@ -208,17 +208,18 @@ public class PeopleResourceJaxRs { // The actual class name is going to be uniqu
208208
@GET
209209
@Path("{id}")
210210
@Produces("application/json")
211-
public Person get(@PathParam("id") Long id){
211+
public RestResponse<Person> get(@PathParam("id") Long id){
212212
Person person = resource.get(id);
213213
if (person == null) {
214-
throw new WebApplicationException(404);
214+
return ResponseBuilder.create(404).build();
215+
} else {
216+
return ResponseBuilder.ok(var3).build();
215217
}
216-
return person;
217218
}
218219
219220
@GET
220221
@Produces("application/json")
221-
public Response list(@QueryParam("sort") List<String> sortQuery,
222+
public RestResponse<Person> list(@QueryParam("sort") List<String> sortQuery,
222223
@QueryParam("page") @DefaultValue("0") int pageIndex,
223224
@QueryParam("size") @DefaultValue("20") int pageSize) {
224225
Page page = Page.of(pageIndex, pageSize);
@@ -229,16 +230,16 @@ public class PeopleResourceJaxRs { // The actual class name is going to be uniqu
229230
230231
@GET
231232
@Path("/count")
232-
public long count() {
233-
return resource.count();
233+
public RestResponse<Long> count() {
234+
return ResponseBuilder.ok(var1.count()).build()
234235
}
235236
236237
@Transactional
237238
@POST
238239
@Consumes("application/json")
239240
@Produces("application/json")
240-
public Response add(Person personToSave) {
241-
Person person = resource.add(person);
241+
public RestResponse<Person> add(Person personToSave) {
242+
Person person = resource.add(personToSave);
242243
// ... build a new location URL and return 201 response with an entity
243244
}
244245
@@ -247,10 +248,10 @@ public class PeopleResourceJaxRs { // The actual class name is going to be uniqu
247248
@Path("{id}")
248249
@Consumes("application/json")
249250
@Produces("application/json")
250-
public Response update(@PathParam("id") Long id, Person personToSave) {
251+
public RestResponse<Person> update(@PathParam("id") Long id, Person personToSave) {
251252
if (resource.get(id) == null) {
252253
Person person = resource.update(id, personToSave);
253-
return Response.status(204).build();
254+
return ResponseBuilder.create(204).build();
254255
}
255256
Person person = resource.update(id, personToSave);
256257
// ... build a new location URL and return 201 response with an entity
@@ -259,10 +260,8 @@ public class PeopleResourceJaxRs { // The actual class name is going to be uniqu
259260
@Transactional
260261
@DELETE
261262
@Path("{id}")
262-
public void delete(@PathParam("id") Long id) {
263-
if (!resource.delete(id)) {
264-
throw new WebApplicationException(404);
265-
}
263+
public RestResponse<Person> delete(@PathParam("id") Long id) {
264+
return !var2.delete(id) ? ResponseBuilder.create(404).build() : ResponseBuilder.create(204).build();
266265
}
267266
}
268267
----

Diff for: extensions/panache/hibernate-orm-rest-data-panache/deployment/pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@
3737
</dependency>
3838
<dependency>
3939
<groupId>io.quarkus</groupId>
40-
<artifactId>quarkus-resteasy-jackson-deployment</artifactId>
40+
<artifactId>quarkus-rest-jackson-deployment</artifactId>
4141
<scope>test</scope>
4242
</dependency>
4343
<dependency>
4444
<groupId>io.quarkus</groupId>
45-
<artifactId>quarkus-resteasy-links-deployment</artifactId>
45+
<artifactId>quarkus-rest-links-deployment</artifactId>
4646
<scope>test</scope>
4747
</dependency>
4848
<dependency>

Diff for: extensions/panache/rest-data-panache/deployment/src/main/java/io/quarkus/rest/data/panache/deployment/methods/AddMethodImplementor.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import jakarta.ws.rs.core.Response;
1010
import jakarta.ws.rs.core.UriInfo;
1111

12+
import org.jboss.resteasy.reactive.RestResponse;
13+
1214
import io.quarkus.deployment.Capabilities;
1315
import io.quarkus.gizmo.ClassCreator;
1416
import io.quarkus.gizmo.FieldDescriptor;
@@ -104,7 +106,8 @@ public AddMethodImplementor(Capabilities capabilities) {
104106
protected void implementInternal(ClassCreator classCreator, ResourceMetadata resourceMetadata,
105107
ResourceProperties resourceProperties, FieldDescriptor resourceField) {
106108
MethodCreator methodCreator = SignatureMethodCreator.getMethodCreator(METHOD_NAME, classCreator,
107-
isNotReactivePanache() ? responseType() : uniType(resourceMetadata.getEntityType()),
109+
isNotReactivePanache() ? responseType(resourceMetadata.getEntityType())
110+
: uniType(resourceMetadata.getEntityType()),
108111
param("entity", resourceMetadata.getEntityType()), param("uriInfo", UriInfo.class));
109112

110113
// Add method annotations
@@ -115,7 +118,7 @@ protected void implementInternal(ClassCreator classCreator, ResourceMetadata res
115118
addConsumesAnnotation(methodCreator, APPLICATION_JSON);
116119
addProducesJsonAnnotation(methodCreator, resourceProperties);
117120
addLinksAnnotation(methodCreator, resourceProperties, resourceMetadata.getEntityType(), REL);
118-
addOpenApiResponseAnnotation(methodCreator, Response.Status.CREATED, resourceMetadata.getEntityType());
121+
addOpenApiResponseAnnotation(methodCreator, RestResponse.Status.CREATED, resourceMetadata.getEntityType());
119122
addSecurityAnnotations(methodCreator, resourceProperties);
120123
// Add parameter annotations
121124
if (hasValidatorCapability()) {

Diff for: extensions/panache/rest-data-panache/deployment/src/main/java/io/quarkus/rest/data/panache/deployment/methods/CountMethodImplementor.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import static io.quarkus.rest.data.panache.deployment.utils.SignatureMethodCreator.responseType;
55
import static io.quarkus.rest.data.panache.deployment.utils.SignatureMethodCreator.uniType;
66

7-
import jakarta.ws.rs.core.Response;
7+
import org.jboss.resteasy.reactive.RestResponse;
88

99
import io.quarkus.deployment.Capabilities;
1010
import io.quarkus.gizmo.ClassCreator;
@@ -75,14 +75,14 @@ protected void implementInternal(ClassCreator classCreator, ResourceMetadata res
7575
ResourceProperties resourceProperties, FieldDescriptor resourceField) {
7676
// Method parameters: sort strings, page index, page size, uri info
7777
MethodCreator methodCreator = SignatureMethodCreator.getMethodCreator(RESOURCE_METHOD_NAME, classCreator,
78-
isNotReactivePanache() ? responseType() : uniType(Long.class));
78+
isNotReactivePanache() ? responseType(Long.class) : uniType(Long.class));
7979

8080
// Add method annotations
8181
addGetAnnotation(methodCreator);
8282
addProducesAnnotation(methodCreator, APPLICATION_JSON);
8383
addPathAnnotation(methodCreator, appendToPath(resourceProperties.getPath(RESOURCE_METHOD_NAME), RESOURCE_METHOD_NAME));
8484
addMethodAnnotations(methodCreator, resourceProperties.getMethodAnnotations(RESOURCE_METHOD_NAME));
85-
addOpenApiResponseAnnotation(methodCreator, Response.Status.OK, Long.class, false);
85+
addOpenApiResponseAnnotation(methodCreator, RestResponse.Status.OK, Long.class, false);
8686
addSecurityAnnotations(methodCreator, resourceProperties);
8787
addLinksAnnotation(methodCreator, resourceProperties, resourceMetadata.getEntityType(), REL);
8888

Diff for: extensions/panache/rest-data-panache/deployment/src/main/java/io/quarkus/rest/data/panache/deployment/methods/DeleteMethodImplementor.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import jakarta.ws.rs.core.Response;
99

10+
import org.jboss.resteasy.reactive.RestResponse;
11+
1012
import io.quarkus.deployment.Capabilities;
1113
import io.quarkus.gizmo.BranchResult;
1214
import io.quarkus.gizmo.ClassCreator;
@@ -84,7 +86,8 @@ public DeleteMethodImplementor(Capabilities capabilities) {
8486
protected void implementInternal(ClassCreator classCreator, ResourceMetadata resourceMetadata,
8587
ResourceProperties resourceProperties, FieldDescriptor resourceField) {
8688
MethodCreator methodCreator = SignatureMethodCreator.getMethodCreator(METHOD_NAME, classCreator,
87-
isNotReactivePanache() ? responseType() : uniType(resourceMetadata.getEntityType()),
89+
isNotReactivePanache() ? responseType(resourceMetadata.getEntityType())
90+
: uniType(resourceMetadata.getEntityType()),
8891
param("id", resourceMetadata.getIdType()));
8992

9093
// Add method annotations
@@ -93,7 +96,7 @@ protected void implementInternal(ClassCreator classCreator, ResourceMetadata res
9396
addPathParamAnnotation(methodCreator.getParameterAnnotations(0), "id");
9497
addLinksAnnotation(methodCreator, resourceProperties, resourceMetadata.getEntityType(), REL);
9598
addMethodAnnotations(methodCreator, resourceProperties.getMethodAnnotations(RESOURCE_METHOD_NAME));
96-
addOpenApiResponseAnnotation(methodCreator, Response.Status.NO_CONTENT);
99+
addOpenApiResponseAnnotation(methodCreator, RestResponse.Status.NO_CONTENT);
97100
addSecurityAnnotations(methodCreator, resourceProperties);
98101

99102
ResultHandle resource = methodCreator.readInstanceField(resourceField, methodCreator.getThis());

Diff for: extensions/panache/rest-data-panache/deployment/src/main/java/io/quarkus/rest/data/panache/deployment/methods/GetMethodImplementor.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import jakarta.ws.rs.core.Response;
99

10+
import org.jboss.resteasy.reactive.RestResponse;
11+
1012
import io.quarkus.deployment.Capabilities;
1113
import io.quarkus.gizmo.BranchResult;
1214
import io.quarkus.gizmo.ClassCreator;
@@ -86,15 +88,16 @@ public GetMethodImplementor(Capabilities capabilities) {
8688
protected void implementInternal(ClassCreator classCreator, ResourceMetadata resourceMetadata,
8789
ResourceProperties resourceProperties, FieldDescriptor resourceField) {
8890
MethodCreator methodCreator = SignatureMethodCreator.getMethodCreator(METHOD_NAME, classCreator,
89-
isNotReactivePanache() ? responseType() : uniType(resourceMetadata.getEntityType()),
91+
isNotReactivePanache() ? responseType(resourceMetadata.getEntityType())
92+
: uniType(resourceMetadata.getEntityType()),
9093
param("id", resourceMetadata.getIdType()));
9194

9295
// Add method annotations
9396
addPathAnnotation(methodCreator, appendToPath(resourceProperties.getPath(RESOURCE_METHOD_NAME), "{id}"));
9497
addGetAnnotation(methodCreator);
9598
addProducesJsonAnnotation(methodCreator, resourceProperties);
9699
addMethodAnnotations(methodCreator, resourceProperties.getMethodAnnotations(RESOURCE_METHOD_NAME));
97-
addOpenApiResponseAnnotation(methodCreator, Response.Status.OK, resourceMetadata.getEntityType());
100+
addOpenApiResponseAnnotation(methodCreator, RestResponse.Status.OK, resourceMetadata.getEntityType());
98101
addSecurityAnnotations(methodCreator, resourceProperties);
99102

100103
addPathParamAnnotation(methodCreator.getParameterAnnotations(0), "id");

Diff for: extensions/panache/rest-data-panache/deployment/src/main/java/io/quarkus/rest/data/panache/deployment/methods/ListMethodImplementor.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import jakarta.ws.rs.core.UriInfo;
3232

3333
import org.jboss.jandex.Type;
34+
import org.jboss.resteasy.reactive.RestResponse;
3435

3536
import io.quarkus.deployment.Capabilities;
3637
import io.quarkus.gizmo.AnnotatedElement;
@@ -190,7 +191,8 @@ private void implementPaged(ClassCreator classCreator, ResourceMetadata resource
190191
param.getClazz()));
191192
}
192193
MethodCreator methodCreator = SignatureMethodCreator.getMethodCreator(getMethodName(), classCreator,
193-
isNotReactivePanache() ? responseType() : uniType(resourceMetadata.getEntityType()),
194+
isNotReactivePanache() ? responseType(resourceMetadata.getEntityType())
195+
: uniType(resourceMetadata.getEntityType()),
194196
parameters.toArray(new SignatureMethodCreator.Parameter[0]));
195197

196198
// Add method annotations
@@ -199,7 +201,7 @@ private void implementPaged(ClassCreator classCreator, ResourceMetadata resource
199201
addProducesJsonAnnotation(methodCreator, resourceProperties);
200202
addLinksAnnotation(methodCreator, resourceProperties, resourceMetadata.getEntityType(), REL);
201203
addMethodAnnotations(methodCreator, resourceProperties.getMethodAnnotations(RESOURCE_METHOD_NAME));
202-
addOpenApiResponseAnnotation(methodCreator, Response.Status.OK, resourceMetadata.getEntityType(), true);
204+
addOpenApiResponseAnnotation(methodCreator, RestResponse.Status.OK, resourceMetadata.getEntityType(), true);
203205
addSecurityAnnotations(methodCreator, resourceProperties);
204206
addSortQueryParamValidatorAnnotation(methodCreator);
205207
addQueryParamAnnotation(methodCreator.getParameterAnnotations(0), "sort");
@@ -276,7 +278,8 @@ private void implementNotPaged(ClassCreator classCreator, ResourceMetadata resou
276278
param.getClazz()));
277279
}
278280
MethodCreator methodCreator = SignatureMethodCreator.getMethodCreator(getMethodName(), classCreator,
279-
isNotReactivePanache() ? responseType() : uniType(resourceMetadata.getEntityType()),
281+
isNotReactivePanache() ? responseType(resourceMetadata.getEntityType())
282+
: uniType(resourceMetadata.getEntityType()),
280283
parameters.toArray(new SignatureMethodCreator.Parameter[0]));
281284

282285
// Add method annotations
@@ -285,7 +288,7 @@ private void implementNotPaged(ClassCreator classCreator, ResourceMetadata resou
285288
addProducesJsonAnnotation(methodCreator, resourceProperties);
286289
addLinksAnnotation(methodCreator, resourceProperties, resourceMetadata.getEntityType(), REL);
287290
addMethodAnnotations(methodCreator, resourceProperties.getMethodAnnotations(RESOURCE_METHOD_NAME));
288-
addOpenApiResponseAnnotation(methodCreator, Response.Status.OK, resourceMetadata.getEntityType(), true);
291+
addOpenApiResponseAnnotation(methodCreator, RestResponse.Status.OK, resourceMetadata.getEntityType(), true);
289292
addSecurityAnnotations(methodCreator, resourceProperties);
290293
addQueryParamAnnotation(methodCreator.getParameterAnnotations(0), "sort");
291294
addQueryParamAnnotation(methodCreator.getParameterAnnotations(1), "namedQuery");

Diff for: extensions/panache/rest-data-panache/deployment/src/main/java/io/quarkus/rest/data/panache/deployment/methods/StandardMethodImplementor.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
import jakarta.ws.rs.Produces;
1414
import jakarta.ws.rs.QueryParam;
1515
import jakarta.ws.rs.core.Context;
16-
import jakarta.ws.rs.core.Response;
1716

1817
import org.jboss.jandex.AnnotationInstance;
1918
import org.jboss.logging.Logger;
19+
import org.jboss.resteasy.reactive.RestResponse;
2020

2121
import io.quarkus.deployment.Capabilities;
2222
import io.quarkus.deployment.Capability;
@@ -171,25 +171,25 @@ protected void addSecurityAnnotations(AnnotatedElement element, ResourceProperti
171171
}
172172
}
173173

174-
protected void addOpenApiResponseAnnotation(AnnotatedElement element, Response.Status status) {
174+
protected void addOpenApiResponseAnnotation(AnnotatedElement element, RestResponse.Status status) {
175175
if (capabilities.isPresent(Capability.SMALLRYE_OPENAPI)) {
176176
element.addAnnotation(OPENAPI_RESPONSE_ANNOTATION)
177177
.add("responseCode", String.valueOf(status.getStatusCode()));
178178
}
179179
}
180180

181-
protected void addOpenApiResponseAnnotation(AnnotatedElement element, Response.Status status, String entityType) {
181+
protected void addOpenApiResponseAnnotation(AnnotatedElement element, RestResponse.Status status, String entityType) {
182182
addOpenApiResponseAnnotation(element, status, entityType, false);
183183
}
184184

185-
protected void addOpenApiResponseAnnotation(AnnotatedElement element, Response.Status status, String entityType,
185+
protected void addOpenApiResponseAnnotation(AnnotatedElement element, RestResponse.Status status, String entityType,
186186
boolean isList) {
187187
if (capabilities.isPresent(Capability.SMALLRYE_OPENAPI)) {
188188
addOpenApiResponseAnnotation(element, status, toClass(entityType), isList);
189189
}
190190
}
191191

192-
protected void addOpenApiResponseAnnotation(AnnotatedElement element, Response.Status status, Class<?> clazz,
192+
protected void addOpenApiResponseAnnotation(AnnotatedElement element, RestResponse.Status status, Class<?> clazz,
193193
boolean isList) {
194194
if (capabilities.isPresent(Capability.SMALLRYE_OPENAPI)) {
195195
AnnotationCreator schemaAnnotation = AnnotationCreator.of(OPENAPI_SCHEMA_ANNOTATION)

Diff for: extensions/panache/rest-data-panache/deployment/src/main/java/io/quarkus/rest/data/panache/deployment/methods/UpdateMethodImplementor.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import jakarta.ws.rs.core.Response;
1313
import jakarta.ws.rs.core.UriInfo;
1414

15+
import org.jboss.resteasy.reactive.RestResponse;
16+
1517
import io.quarkus.arc.Arc;
1618
import io.quarkus.arc.ArcContainer;
1719
import io.quarkus.arc.InstanceHandle;
@@ -136,7 +138,8 @@ public UpdateMethodImplementor(Capabilities capabilities) {
136138
protected void implementInternal(ClassCreator classCreator, ResourceMetadata resourceMetadata,
137139
ResourceProperties resourceProperties, FieldDescriptor resourceField) {
138140
MethodCreator methodCreator = SignatureMethodCreator.getMethodCreator(METHOD_NAME, classCreator,
139-
isNotReactivePanache() ? responseType() : uniType(resourceMetadata.getEntityType()),
141+
isNotReactivePanache() ? responseType(resourceMetadata.getEntityType())
142+
: uniType(resourceMetadata.getEntityType()),
140143
param("id", resourceMetadata.getIdType()),
141144
param("entity", resourceMetadata.getEntityType()),
142145
param("uriInfo", UriInfo.class));
@@ -150,7 +153,7 @@ protected void implementInternal(ClassCreator classCreator, ResourceMetadata res
150153
addProducesJsonAnnotation(methodCreator, resourceProperties);
151154
addLinksAnnotation(methodCreator, resourceProperties, resourceMetadata.getEntityType(), REL);
152155
addMethodAnnotations(methodCreator, resourceProperties.getMethodAnnotations(RESOURCE_UPDATE_METHOD_NAME));
153-
addOpenApiResponseAnnotation(methodCreator, Response.Status.CREATED, resourceMetadata.getEntityType());
156+
addOpenApiResponseAnnotation(methodCreator, RestResponse.Status.CREATED, resourceMetadata.getEntityType());
154157
addSecurityAnnotations(methodCreator, resourceProperties);
155158
// Add parameter annotations
156159
if (hasValidatorCapability()) {

0 commit comments

Comments
 (0)