Spring 向序列化添加内容属性

Spring 向序列化添加内容属性,spring,jackson,spring-data-rest,Spring,Jackson,Spring Data Rest,每当我在spring data rest中使用自定义序列化程序时,它都会添加一个“content”属性来包装返回的对象,如: { "content":{ object properties... }, _links: { } } 编辑:添加配置类 @Configuration public class JacksonCustomizations { @Bean public Module rateModule() { ret

每当我在spring data rest中使用自定义序列化程序时,它都会添加一个“content”属性来包装返回的对象,如:

{
   "content":{
      object properties...
   },
   _links: {
   }
}
编辑:添加配置类

@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();
            }

        }
    }
}
@配置
公共类JacksonCustomizations{
@豆子
公共模块rateModule(){
返回新的RateModule();
}
@抑制警告(“串行”)
静态类RateModule扩展SimpleModule{
公共模块(){
setMixinNotation(Package.class、RateModule.packagexin.class);
SetMixinNotation(Section.class、RateModule.SectionMixin.class);
setMixinNotation(MainPart.class、RateModule.MainPartMixin.class);
SetMixin符号(子部分类,费率模块子部分类);
addSerializer(MaintenanceTask.class,新的MaintenanceTaskSerializer());
addDeserializer(Package.class,new PackageDeserializer());
addDeserializer(Section.class,新的SectionDeserializer());
addDeserializer(MainPart.class,新的MainPartDeserializer());
addDeserializer(MaintenanceTask.class,新的MaintenanceTaskDeserializer());
}
@JsonAutoDetect(fieldVisibility=Visibility.NONE,GettServiceability=Visibility.NONE,IsGetServiceability=Visibility.NONE)
静态抽象类packagexin{
@JsonProperty(“名称”)公共抽象字符串getName();
@JsonProperty(“节”)公共摘要列表getSections();
}
@JsonAutoDetect(fieldVisibility=Visibility.NONE,GettServiceability=Visibility.NONE,IsGetServiceability=Visibility.NONE)
静态抽象类SectionMixin{
@JsonProperty(“id”)公共抽象Long getId();
@JsonProperty(“名称”)公共抽象字符串getName();
}
@JsonAutoDetect(fieldVisibility=Visibility.NONE,GettServiceability=Visibility.NONE,IsGetServiceability=Visibility.NONE)
静态抽象类MainPartMixin{
@JsonProperty(“名称”)公共抽象字符串getName();
@JsonProperty(“子部件”)公共摘要列表getSubParts();
}
@JsonAutoDetect(fieldVisibility=Visibility.NONE,GettServiceability=Visibility.NONE,IsGetServiceability=Visibility.NONE)
静态抽象类SubPartMixin{
@JsonProperty(“id”)公共抽象Long getId();
@JsonProperty(“名称”)公共抽象字符串getName();
}
静态类MaintenanceTaskSerializer扩展JsonSerializer{
@凌驾
public void序列化(最终MaintenanceTask值、最终JsonGenerator gen、最终SerializerProvider序列化器)
抛出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(“过程引用”,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());
writeEndObject将军();
}
}
}
}
但是,当我在没有自定义序列化程序的情况下使用SpringDataREST序列化时,不会插入该属性


如何防止显示此属性?

这是一个已知问题

已在此处报告:

该问题指向这个堆栈溢出问题:

您能否发布一个您正在使用的自定义序列化程序的示例,以及如何在代码中应用它?看起来您正在以某种方式转换为HATEOAS json格式。@NickDeFazio发布了serializer@NickDeFazio实际上,SpringDataREST使用HATEOAS,而且当您不指定序列化程序时,spring使用PersistentEntityResourceSerializer序列化PersistentEntityResource,该资源最终是来自hateoas的资源类,但仅当我使用自定义序列化器时,才会插入content属性