2016-12-14 1 views
0

클라이언트로부터 JSON 입력을 받아 JSON 출력을 클라이언트로 리턴하는 JAX-RS 웹 서비스가 있습니다. 입력 및 출력 JSON 메시지를 모두 기록해야합니다. 아래 코드와 같이 입력에 대해 그렇게하는 방법을 알고 있습니다. 이 코드는 들어오는 정확한 JSON 입력을 가져올 것입니다. 어떻게 출력을 위해 동일한 작업을 수행합니까?JAX-RS 웹 서비스에서 JSON 응답을 기록하십시오.

public class LogRequestFilter implements ContainerRequestFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 
     InputStream inputStream = requestContext.getEntityStream(); 
     // Read the JSON request input from the input stream. 
    } 
} 
+0

log4j를 사용하면 입력, 출력 및 오류도 모두 기록됩니다. https://www.tutorialspring.com/spring/logging_with_log4j.htm – PLP

답변

0

사용 ContainerResponseFilter는 교환 Entity를 얻을 수 있습니다. JAX-RS 서버의 공급자 목록에 필터를 추가

public class LogResponseFilter implements ContainerResponseFilter { 
    public void filter(ContainerRequestContext inContext, ContainerResponseContext outContext) throws IOException{ 

     Object entity = outContext.getEntity(); 
     //log entity.toSgring() 

     //You can use the output stream to write a custom message 
     //OutputStream outputStream = outContext.getEntityStream(); 
    } 
} 

그냥 OutputStream에이 필터가 호출 될 때 비어

를 참조 https://stackoverflow.com/a/25337892/6371459이 링크보고, 페이로드를 기록하려면 JAX-RS 런타임이 JAX-RS 런타임에 기록하지 않았기 때문입니다. 당신의 필터 후 런타임은 OutputStream에

에 엔티티를 직렬화 할 올바른 MessageBodyWriter를 선택합니다 그래서는 MessageBodyWriters 원하는 콘텐츠 유형에 기록 후 WriterInterceptor가 execuded 할 추가 할 필요가있다.

이전 링크에는 전체 코드가 있습니다.

+0

안녕하세요,이 클래스 JAXRSUtils는 무엇입니까? 저어지의 일부가 아닌 것 같습니다. – user3573403

+0

내 실수. CXF 프레임 워크에 적합한 솔루션을 게시했습니다. 표준 JAX-RS'ContainerResponseContext'를 사용하는 답변을 업데이트했습니다 – pedrofb

+0

답변이 명확하지 않습니다. 출력 스트림으로 무엇을합니까? 클라이언트에게 전달되는 응답을 검색하고 싶습니다. 출력 스트림에서 데이터를 얻으려면 어떻게해야합니까? – user3573403

관련 문제