2017-10-06 13 views
0

저지 (JaxRS 및 Jackson)를 사용 중입니다.저지 : 하나의 DTO에 대해 다른 JSON 필터

나는 학생 DTO가 있습니다.

class StudentDTO { 
    private Integer id; 
    private String name, className, grade; 
    private String createdAt, modifiedAt; 

    // getter, setter for all private members above 

DTO를 만들고, 읽고, 업데이트 할 때 다시 사용하기를 원합니다.

그러나 생성시 name, className 및 grade 만 허용됩니다. 업데이트에는 className 및 등급 만 허용됩니다.

현재 솔루션은 작성, 업데이트 및 읽기 용의 세 가지 DTO 클래스를 사용하고 있습니다.

DTO 클래스를 하나만 사용하여이를 수행하는 방법은 무엇입니까?

+0

원하는 필수 매개 변수를 사용하여 생성자를 오버로드 할 수 있습니다. – Coder

+0

오버로드 생성자는 요청 매개 변수를 필터링하는 데 사용할 수 없습니다. Jackson은 개인이더라도 getter/setter/constructor가 아닌 클래스 멤버에 매핑됩니다. – Kuzunoha

+0

필자는 개인적으로 3 DTO가 의미론면에서 더 우수하다고 생각합니다. 어떤 필드가 존재해야하는지 기억하지 않아도 API의 적절한 문서를 제공합니다. 내 두 센트;) 또한 그들을 불변으로 만들 수 있다면 ... –

답변

0

모든 경우에 대해 사용자 지정 serializer를 만들도록하십시오.
StdSerializer<T>를 확장하여 사용자 지정 serializer를 작성하고 serialize(T value, JsonGenerator gen, SerializerProvider provider) 메소드를 오버라이드 (override)

ObjectMapper mapper = new ObjectMapper(); 
SimpleModule module = new SimpleModule(); 
module.addSerializer(StudentDTO.class, new CustomSerializer()); 
mapper.registerModule(module); 


질문 하나 더 ObjectMapper
에서 그것을 registrate. 개체를 만들면 name, className 및 grade 이외의 필드는 비어 있습니까? Yow는 수업 수준에서 특수 효과 @JsonInclude(Include.NON_NULL)을 사용해 볼 수 있습니다.

+0

관련 코드 스 니핏을 포함하여 답변을 개선하십시오. 링크는 시대에 뒤 떨어진 경향이 있습니다. –

+0

@ M.leRutte 알았어, 문제 없어. –