문제

제가 작업 중인 RESTful API의 기반이 되는 POJO가 있습니다.그러나 API를 더욱 완벽하게 만들기 위해 일부 응답에는 다른 정보를 포함해야 합니다.나는 이러한 추가 정보를 POJO에 넣는 것이 아니라 웹 서비스 계층에 마치 있는 것처럼 포함시키고 싶지 않습니다.

"약속"이 있는 "사람"을 다루고 있습니다.각 약속에는 한 사람만 있습니다.

따라서 /Patients/1과 같은 RESTful 호출이 있고 기본적으로 Person에 대한 POJO를 가져오고 현재 XStream을 사용하여 이를 직렬화하고 전송하고 있습니다.이것은 훌륭하게 작동하지만 다음과 같은 작업을 수행하고 싶습니다.

<Person> 
<firstName>James</firstName>
 ... other fields ...
<nextAppointment href="/Appointment/12345>2010-02-19</nextAppointment>
<prevAppointment href="/Appointment/12346>2010-01-01</prevAppointemnt>
</Person>

다음 및 이전 약속이 실제로 Person POJO에 포함되지 않은 경우.나는 이것을 달성하기 위한 좋은 "봄의 길"을 찾고 있습니다.클라이언트는 /Patients/1/PreviousAppointment 및 /Patients/1/NextAppointment와 같은 작업을 수행할 수 있지만 호출량을 줄이고(사전 최적화?) 필요한 경우 더 많은 정보를 얻을 수 있는 방법을 제공하려고 합니다. 그는 href를 사용하여 이를 수행합니다.

XStreamMarshaller를 사용하는 것은 매우 우아합니다. 왜냐하면 제가 하는 모든 작업은 POJO 또는 POJO 목록의 뷰를 전달하고 이를 처리하기 때문입니다.하지만 보내기 전에 의사에게 조금 알려줘야 해요.

감사해요!

도움이 되었습니까?

해결책

이는 비즈니스 개체를 마샬러에 직접 전달할 때 발생하는 문제입니다. 해당 개체를 응답으로 변환하는 방법에 유연성이 거의 없습니다.객체를 직접 사전 변환하는 방법에 대해 할 말이 있습니다. 그렇게 하면 더 많은 제어력을 얻을 수 있습니다.

따라서 원하는 특정 출력 구조가 있는 경우 XStream을 사용하여 그와 유사한 클래스 구조를 구축해야 합니다.그런 다음 비즈니스 개체를 해당 클래스 구조로 변환하고 대신 XStream에 전달합니다.

덜 우아해 보일 수도 있지만 현재 XStream 기반 시스템처럼 비즈니스 개체 모델의 작은 변경으로 인해 시스템이 손상될 가능성이 훨씬 적습니다.

다른 팁

문제에 대한 해결책 : CustomizedConverter를 만듭니다 ...

공개 클래스 CustomizedConverter 구현 컨버터 {

@override public void Marshal (Object Source, HierarchicalStreamwriter Writer, MarshallingContext Context) {....}

@override public object unmarshal (HierarchicalStreamReader Reader, UnmarshallingContext 컨텍스트) {..}

@override public boolean canconvert (클래스 클레이즈) {..}

}

Marshaller 참조와 함께 변환기를 사용해야 할 사항을 알기 위해 이것.

따라서 기본적으로 변환기는 POJO에서 작동하며 계약에 주어진대로 XML 응답을받을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top