2015-01-31 4 views
0

json 및 xml로 변환하려는 일부 중요한 도메인 객체가 있습니다. 이 작업을 수행하기 위해 봄보기 해상도를 사용하고 있지만 그 점 옆에 있습니다.잭슨과 JaxB 직렬화로 내 RESTful 웹 서비스를 설계하는 방법

xml/json으로 변환해야하는 필드를 지정하기 위해 도메인 객체에 주석을 추가하고 싶습니다.

뭔가

@XmlRootElement 
public class SensitiveDomainObject { 

... 

    public String getPassword() {...} 

    @XmlAttribute 
    @JsonValue 
    public String getAccountName() {...} 

    @XmlAttribute 
    @JsonValue 
    public String getGoldMemberStatus() {...} 

} 

처럼 내가 원하는 getAccountName()와 getGoldMemberStatus()는 JSON과 XML로 직렬화 할 수 있지만하려면 getPassword는 직렬화되지 않을 수 있습니다. 내가 원하지 않는 무엇

는 JSON과 하나가 표준으로 다른 방법으로 다른 방법을 마크 업 할 필요가있는 경우 그 혼란수록 XML에 대한

1) 별도의 '주석 배치 전략'입니다.

2) 명시 적으로 필드를 무시해야합니다. 일부 프로그래머가 미래에 와서 예를 들어 @JsonIgnore 주석을 포함하지 않고 새로 민감한 필드를 추가하면 갑자기 민감한 필드가 공유되기 때문입니다.

3) getPassword()와 같은 메소드를 private으로 설정해야합니다. 나는 여전히 내부적으로 getPassword()를 호출 할 수 있기를 원한다.

누구든지이 작업을 했습니까?

편집은 본질적으로 비즈니스 로직 계층에 주석을 명시 적으로 DTO들과 내가 함께 실행 한 디자인을 보여주는 IBM에서 사진을 포함. 프리젠 테이션 레이어는 들어오는 URL을 기반으로 요청하고 제공 할 DTO를 파악합니다.

enter image description here

답변

1

이 전송 무엇을 비즈니스 클래스는 어떤 차별화에 대해 많이 걱정하는 경우, 당신은 명시 적으로 이전하려는 속성 만 포함됩니다 DTO 클래스의 별도의 패키지를 구현 고려할 수 있습니다 .

이 경우 프로그래머가이를 잊었 기 때문에 전송 속성을 명시 적으로 포함시켜야합니다.

password과 같은 속성이 무시되는 일부 유효성 검사 규칙을 추가하고 JAXB 컨텍스트 수준에서이를 적용하는 것과 같은 다른 방법이 있습니다. 그러나 알지 못하는 사람이 kennwort 또는 credentials으로 이름을 지정하거나 유효성 검사 규칙이 유효하지 않을 때까지만 작동합니다.

그래서 나는 두 가지를 보게됩니다 : * 프로그래머 (그리고 코드 리뷰와 같은 모든 QA/QS 프로세스)가 그를 지원할 수 있다고 믿으십시오. * 또는 전송 클래스를 명시 적으로 지정합니다.

중요한 외부 인터페이스에 대해서는 두 번째 방법 (명시 적 DTO)을 사용하는 것이 좋습니다. password가 거기서 끝나면 잊어 버릴 수는 없으며 단지 목적에 부합합니다.

+0

대안을 테스트 한 후 완전히 동의하고 제안한 경로를 따라갔습니다. 또한, 나머지 API에서는 응답에 도메인 개체 정보뿐만 아니라 관련 도메인 개체 및 기타 정보에 대한 액세스 URL도 포함되도록하고 있습니다.원래의 도메인 객체를 깨끗하고 일관되게 유지하려면 제안을 따르고 명시적인 DTO를 만드는 것이 더 좋습니다. –

관련 문제