2017-11-30 17 views
2
나는 봄의 데이터 나머지 부분에서 사용자 지정 serializer를 사용할 때마다

컨텐츠 속성을 추가, 그것은 개체를 wrapps는 "내용"속성이 같은 반환 추가 추가 구성 클래스직렬화

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

     } 
    } 
} 

하지만 사용자 정의 직렬자를 사용하지 않고 스프링 데이터 나머지 직렬화를 사용하면 속성이 삽입되지 않습니다.

어떻게이 속성이 표시되지 않도록 할 수 있습니까?

+0

당신이 작업하는 사용자 지정 시리얼 라이저 중 하나의 예를 게시 할 수 있습니다, 그것은 코드에서 어떻게 적용된? 어떻게 든 HATEOAS json 형식으로 변환되는 것 같습니다. –

+0

@NickDeFazio @ serialDir에 대한 구성 클래스 게시 됨 –

+1

@NickDeFazio 실제로 봄 데이터 나머지는 HATEOAS를 사용하며, serializer를 지정하지 않으면 스프링이 PersistentEntityResource를 직렬화하는 PersistentEntityResourceSerializer를 사용합니다. PersistentEntityResource는 결국 hateoas의 Resource 클래스입니다 , 그러나 사용자 지정 serializer를 사용할 때만 content 속성이 삽입됩니다. –

답변