저지에서 ContextResolver
은 무엇이며 Provider
은 무엇인가요? 둘의 차이점은 무엇입니까? 저지와 함께 겐슨을 사용하고 있습니다. Gersey은 Jersey가 클래스 패스에서 Genson JAR을 발견하면 자동 등록됩니다. Genson JAR의 WEB-INF/services 디렉토리에는 "org.glassfish.jersey.internal.spi.AutoDiscoverable"이라는 파일이 있습니다. 더 혼란 놀이로 오는 곳저지의 ContextResolver 및 Provider는 무엇입니까?
@Provider
@Consumes({MediaType.APPLICATION_JSON, "text/json", "application/*+json"})
@Produces({MediaType.APPLICATION_JSON, "text/json", "application/*+json"})
public class GensonJsonConverter implements MessageBodyReader<Object>, MessageBodyWriter<Object> {
private final ContextResolver<GensonJaxRSFeature> _gensonResolver;
은 다음과 같습니다 :
AutoDiscoverable
경로는 기본적으로 Genson/뉴저지가에게 다음과 같은 클래스를 자동 등록하는 다음이 같은 사용자 지정 공급자를 만들 권장 Genson 문서보고 그래서 :
@Provider
public class GensonProvider implements ContextResolver<Genson> {
private final Genson genson = new GensonBuilder().setSkipNull(true).create();
}
그러나 그 공급자는 내부 Genson 하나 같은 ContextResolver
아닌 MessageBodyReader
/라이터가하는 구현한다. 차이점이 뭐야? 또한 해당 공급자는 을 수행하지 않습니다. 기본 자동 등록 된 것과 동일한 작업을 수행합니다! 특히 은 과 같은 JAXB 태그를 무시합니다! GensonJaxRSFeature
에 대한 Genson 소스 코드에 파고, 나는 Genson 개체과 같이 만들어 볼 : 그에서 내가 볼 수있는 Genson 문서에서
private static final Genson _defaultGenson = new GensonBuilder()
.withBundle(new JAXBBundle())
.useConstructorWithArguments(true)
.create();
은 "JAXBBundle는"관심을 지불 할 Genson 원인이 아마도 무엇이라고 JAXB 주석에.
주요 문제 :
나는 뉴저지에 자동으로 등록 된 기본 Genson JSON 제공자를 사용하려면,하지만 난 거기에 몇 가지 사용자 지정 속성을 설정합니다. 제가 말했듯이, 제가 커스텀 제공자를 등록 할 때, 디폴트 Genson을 사용하지 않습니다!
업데이트 :
이 내가 지금 뭘하는지이며 작동합니다. 그러나 아래의 @eugen 솔루션은 Genson 권장 솔루션입니다.
@Provider
public class GensonProvider implements ContextResolver<GensonJaxRSFeature> {
private final GensonJaxRSFeature _gensonResolver = new GensonJaxRSFeature();
private static final Genson _defaultGenson = new GensonBuilder()
.withBundle(new JAXBBundle())
.useConstructorWithArguments(true)
.setSkipNull(true)
.create();
@Override
public GensonJaxRSFeature getContext(Class<?> type) {
return _gensonResolver.use(_defaultGenson);
}
}
Genson이 사용자 지정 공급자를 정의 할 것을 권장한다고 어떻게합니까? 적어도 현재 문서에서는 사용자 정의 Genson 인스턴스를 사용하는 GensonJaxRSFeature로 구성된 ResourceConfig를 사용하도록 권장합니다. 기본 genson 인스턴스를 변경하지 않아도됩니다. 다른 설정을 원하면 원하는 설정으로 다른 인스턴스를 만드십시오. – eugen
@eugen 내 편집을보고 내가 한 일을 확인하십시오. Genson 문서에서 권장되는 코드는 "새로운 ResourceConfig(). register (new GensonJaxRSFeature(). use (myCustomGenson) .disableSerializationFor (String.class));"입니다. 그것은 당신이 보통 "새로운 ResourceConfig"코드를 넣는 대신에 Provider를 사용하는 것 외에는 지금하고있는 것과 똑같습니다. "새로운 ResourceConfig"는 일반적으로 어디에 있습니까?예제 또는 링크를 게시 할 수 있습니까? – KyleM
ResourceConfig 사용 방법에 대한 [공식 문서] (https://jersey.java.net/documentation/latest/deployment.html#environmenmt.appmodel)를 확인하십시오. 기본 genson 인스턴스를 가져 와서 수정하는 방법은 없습니다. 원하는 설정을 직접 제공하십시오. Genson이 JAXB 주석을 사용하여이 번들을 사용하도록 구성하려면 예를 선택하십시오. – eugen