2

Whenever I use a custom serializer in spring data rest, it adds a "content" property that wrapps the object returned, like:

{
   "content":{
      object properties...
   },
   _links: {
   }
}

EDIT: Add configuration class

@Configuration
public class JacksonCustomizations {

    @Bean
    public Module rateModule() {
        return new RateModule();
    }

    @SuppressWarnings("serial")
    static class RateModule extends SimpleModule {

        public RateModule() {
            setMixInAnnotation(Package.class, RateModule.PackageMixin.class);
            setMixInAnnotation(Section.class, RateModule.SectionMixin.class);
            setMixInAnnotation(MainPart.class, RateModule.MainPartMixin.class);
            setMixInAnnotation(SubPart.class, RateModule.SubPartMixin.class);

            addSerializer(MaintenanceTask.class, new MaintenanceTaskSerializer());

            addDeserializer(Package.class, new PackageDeserializer());
            addDeserializer(Section.class, new SectionDeserializer());
            addDeserializer(MainPart.class, new MainPartDeserializer());
            addDeserializer(MaintenanceTask.class, new MaintenanceTaskDeserializer());
        }

        @JsonAutoDetect(fieldVisibility=Visibility.NONE, getterVisibility=Visibility.NONE, isGetterVisibility=Visibility.NONE)
        static abstract class PackageMixin {

            @JsonProperty("name") public abstract String getName();
            @JsonProperty("sections") public abstract List<Section> getSections();
        }

        @JsonAutoDetect(fieldVisibility=Visibility.NONE, getterVisibility=Visibility.NONE, isGetterVisibility=Visibility.NONE)
        static abstract class SectionMixin {

            @JsonProperty("id") public abstract Long getId();
            @JsonProperty("name") public abstract String getName();
        }

        @JsonAutoDetect(fieldVisibility=Visibility.NONE, getterVisibility=Visibility.NONE, isGetterVisibility=Visibility.NONE)
        static abstract class MainPartMixin {

            @JsonProperty("name") public abstract String getName();
            @JsonProperty("subparts") public abstract List<SubPart> getSubParts();
        }

        @JsonAutoDetect(fieldVisibility=Visibility.NONE, getterVisibility=Visibility.NONE, isGetterVisibility=Visibility.NONE)
        static abstract class SubPartMixin {

            @JsonProperty("id") public abstract Long getId();
            @JsonProperty("name") public abstract String getName();
        }

        static class MaintenanceTaskSerializer extends JsonSerializer<MaintenanceTask> {

            @Override
            public void serialize(final MaintenanceTask value, final JsonGenerator gen, final SerializerProvider serializers)
                    throws IOException, JsonProcessingException {
                gen.writeStartObject();
                gen.writeNumberField("id", value.getId());
                gen.writeStringField("maintenanceRequirementId", value.getMaintenanceRequirementId());
                gen.writeStringField("type", value.getType().toString());
                gen.writeStringField("title", value.getTitle());
                gen.writeStringField("description", value.getDescription());
                gen.writeStringField("note", value.getNote());
                gen.writeStringField("effectivity", value.getEffectivity());
                gen.writeNumberField("procedureReference", value.getReferenceTask().getId());
                gen.writeNumberField("aircraftModel", value.getAircraftModel().getId());
                gen.writeNumberField("packageId", value.getPack().getId());
                gen.writeNumberField("sectionId", value.getSection().getId());
                gen.writeStringField("taskType", value.getTaskType().toString());
                gen.writeEndObject();
            }

        }
    }
}

But when I use spring data rest serialization without custom serializers, the property is not inserted.

How can I prevent this property from showing?

Marco Prado
  • 1,208
  • 1
  • 12
  • 23
  • Can you post an example of one of the custom serializers you are working with, and how it's applied in your code? It looks like you are somehow being converted to a HATEOAS json format. – Nick DeFazio Nov 30 '17 at 20:09
  • @NickDeFazio Posted the configuration class for the serializer – Marco Prado Nov 30 '17 at 22:16
  • 1
    @NickDeFazio Actually, spring data rest uses HATEOAS, and it seems that when you don't specify a serializer, spring uses an PersistentEntityResourceSerializer which serializes a PersistentEntityResource that finally is a Resource class from hateoas, but the content property is inserted only when I use a custom serializer – Marco Prado Nov 30 '17 at 22:22

1 Answers1

0

This is an known issue.

It has been reported here: https://jira.spring.io/browse/DATAREST-504
The issue points to this stack overflow question: Different JSON output when using custom json serializer in Spring Data Rest

Marco Prado
  • 1,208
  • 1
  • 12
  • 23