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();
}
}
}
}
하지만 사용자 정의 직렬자를 사용하지 않고 스프링 데이터 나머지 직렬화를 사용하면 속성이 삽입되지 않습니다.
어떻게이 속성이 표시되지 않도록 할 수 있습니까?
당신이 작업하는 사용자 지정 시리얼 라이저 중 하나의 예를 게시 할 수 있습니다, 그것은 코드에서 어떻게 적용된? 어떻게 든 HATEOAS json 형식으로 변환되는 것 같습니다. –
@NickDeFazio @ serialDir에 대한 구성 클래스 게시 됨 –
@NickDeFazio 실제로 봄 데이터 나머지는 HATEOAS를 사용하며, serializer를 지정하지 않으면 스프링이 PersistentEntityResource를 직렬화하는 PersistentEntityResourceSerializer를 사용합니다. PersistentEntityResource는 결국 hateoas의 Resource 클래스입니다 , 그러나 사용자 지정 serializer를 사용할 때만 content 속성이 삽입됩니다. –