Skip to content

Commit

Permalink
[3.15 LTS] Avoid duplicated field serialization in reflection free Ja…
Browse files Browse the repository at this point in the history
…ckson serializers
  • Loading branch information
mariofusco committed Nov 7, 2024
1 parent e5df492 commit d694417
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ private boolean serializeFields(ClassInfo classInfo, ClassCreator classCreator,
}
FieldSpecs fieldSpecs = fieldSpecsFromField(classInfo, fieldInfo);
if (fieldSpecs != null) {
if (serializedFields.add(fieldSpecs.fieldName)) {
if (serializedFields.add(fieldSpecs.jsonName)) {
if (fieldSpecs.hasUnknownAnnotation()) {
return false;
}
Expand All @@ -291,7 +291,7 @@ private boolean serializeMethods(ClassInfo classInfo, ClassCreator classCreator,
continue;
}
FieldSpecs fieldSpecs = fieldSpecsFromMethod(methodInfo);
if (fieldSpecs != null && serializedFields.add(fieldSpecs.fieldName)) {
if (fieldSpecs != null && serializedFields.add(fieldSpecs.jsonName)) {
if (fieldSpecs.hasUnknownAnnotation()) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,13 @@ public Dog echoDog(Dog dog) {
return dog;
}

@POST
@Path("/record-echo")
@Consumes(MediaType.APPLICATION_JSON)
public StateRecord echoRecord(StateRecord stateRecord) {
return stateRecord;
}

@EnableSecureSerialization
@GET
@Path("/abstract-cat")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.function.Supplier;

Expand Down Expand Up @@ -35,7 +36,7 @@ public JavaArchive get() {
AbstractPet.class, Dog.class, Cat.class, Veterinarian.class, AbstractNamedPet.class,
AbstractUnsecuredPet.class, UnsecuredPet.class, SecuredPersonInterface.class, Frog.class,
Pond.class, FrogBodyParts.class, FrogBodyParts.BodyPart.class, ContainerDTO.class,
NestedInterface.class)
NestedInterface.class, StateRecord.class)
.addAsResource(new StringAsset("admin-expression=admin\n" +
"user-expression=user\n" +
"birth-date-roles=alice,bob\n"), "application.properties");
Expand Down Expand Up @@ -691,4 +692,27 @@ public void testEchoWithMissingPrimitive() {
.body("veterinarian.name", Matchers.is("Dolittle"))
.body("veterinarian.title", Matchers.nullValue());
}

@Test
public void testRecordEcho() {
String response = RestAssured
.with()
.body("{\"code\":\"AL\",\"is_enabled\":true,\"name\":\"Alabama\"}")
.contentType("application/json; charset=utf-8")
.post("/simple/record-echo")
.then()
.statusCode(200)
.contentType("application/json")
.body("name", Matchers.is("Alabama"))
.body("code", Matchers.is("AL"))
.body("is_enabled", Matchers.is(true))
.extract()
.asString();

int first = response.indexOf("is_enabled");
int last = response.lastIndexOf("is_enabled");
// assert that the "is_enabled" field is present only once in the response
assertTrue(first >= 0);
assertEquals(first, last);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public JavaArchive get() {
AbstractPet.class, Dog.class, Cat.class, Veterinarian.class, AbstractNamedPet.class,
AbstractUnsecuredPet.class, UnsecuredPet.class, SecuredPersonInterface.class, Frog.class,
Pond.class, FrogBodyParts.class, FrogBodyParts.BodyPart.class, ContainerDTO.class,
NestedInterface.class)
NestedInterface.class, StateRecord.class)
.addAsResource(new StringAsset("admin-expression=admin\n" +
"user-expression=user\n" +
"birth-date-roles=alice,bob\n" +
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package io.quarkus.resteasy.reactive.jackson.deployment.test;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonIgnoreProperties(ignoreUnknown = true)
public record StateRecord(String name, String code, @JsonProperty("is_enabled") boolean isEnabled) {
}

0 comments on commit d694417

Please sign in to comment.