내 JAX-RS 응용 프로그램에 사용자 정의 MessageBodyWriter<Object>
구현을 등록했습니다. 이 작성기는 문자열을 포함한 다양한 유형을 변환 할 수 있습니다.CXF에서 문자열 용 사용자 정의 MessageBodyWriter를 제공하는 방법
사용자 지정 변환기가 다른 형식에도 성공적으로 사용되지만 문자열의 경우 CXF는이를 고려하지 않습니다. isWriteable
도 호출하지 않습니다. (이것은 CXF 2.x와는 다르므로 CXF 3.x에서 회귀 한 것으로 보입니다.)
CXF 3.1.11 코드를 실행하면 ProviderFactory.messageWriters
목록에 두 개의 항목 (StringTextProvider
, JAXBElementTypedProvider
) 내 사용자 지정 공급자. 첫 번째는 문자열을 변환하기를 원하며 목록의 첫 번째 것은 CXF가 선호합니다.
공급자를 문자열에 대해 기본 공급자로 변경하려면 어떻게해야합니까? 예 : StringTextProvider
을 삭제할 수 있습니까? 아니면 내 공급자가 먼저 오도록 목록을 재정렬 할 수 있습니까?
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class CustomeStringProvider extends StringTextProvider {
@Override
public void writeTo(String object, Class<?> type, Type genType, Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, Object> httpHeaders, OutputStream outputStream) throws IOException {
// ...
}
}
내가 컨버터을 주문하는 클래스 계층 구조를 확인 ProviderFactory.MessageBodyWriterComparator
의 구현,보고에서이 방법에 대한 아이디어를 가지고 :