【问题标题】:Adding content property to serialization将内容属性添加到序列化
【发布时间】:2018-05-14 18:38:42
【问题描述】:

每当我在 Spring Data Rest 中使用自定义序列化程序时,它都会添加一个“内容”属性来包装返回的对象,例如:

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

        }
    }
}

但是当我使用没有自定义序列化器的spring data rest序列化时,属性没有插入。

如何防止显示此属性?

【问题讨论】:

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

标签: spring jackson spring-data-rest


【解决方案1】:

这是一个已知问题。

这里已经报道过:https://jira.spring.io/browse/DATAREST-504
问题指向这个堆栈溢出问题:Different JSON output when using custom json serializer in Spring Data Rest

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多