json을 deserealize하기 위해 injectableValues를 사용하고 있습니다. 나는 이것을 다음과 같이하고있다.
final InjectableValues.Std injectableValues = new InjectableValues.Std();
injectableValues.addValue(HttpRestResponse.class, response);
emailsResponse = this.prepareCustomMapper().reader(EmailsResponse.class).withInjectableValues(injectableValues)
.readValue(response.getBody());
protected ObjectMapper prepareCustomMapper() {
if (this.mapper == null) {
this.mapper = new ObjectMapper();
this.mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
this.mapper.setSerializationInclusion(Inclusion.NON_NULL);
}
return this.mapper;
}
그래서 이것은 잘 작동합니다. 내 문제는 값을 주입하고 싶지 않을 때 다음과 같이 수행한다는 것입니다.
EmailResponse emailResponse = this.prepareCustomMapper().readValue(response.getBody(), EmailResponse.class);
이번에는이 예외가 발생합니다.
java.lang.IllegalStateException: No 'injectableValues' configured, can not inject value with id [com.despegar.cross.commons.utils.restutils.HttpRestResponse]
at org.codehaus.jackson.map.deser.StdDeserializationContext.findInjectableValue(StdDeserializationContext.java:101)
at org.codehaus.jackson.map.deser.impl.PropertyValueBuffer.inject(PropertyValueBuffer.java:54)
at org.codehaus.jackson.map.deser.impl.PropertyBasedCreator.startBuilding(PropertyBasedCreator.java:111)
at org.codehaus.jackson.map.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:892)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:739)
이것은 내 EmailResponse.class 생성자입니다.
// I use this one if i want to inject HttpRestResponseObject
public EmailResponse(@JacksonInject final HttpRestResponse request) {
super();
this.request = request
}
public EmailResponse() {
super();
}
그래서 내 결론은 내가 첫 번째 objectMapper의 mapping에서 설정 한 주입 가능한 값이 두 번째 objectMapper의 매핑에서 유지되며, 값을받지 않는 생성자에 값을 주입하려고한다는 것입니다. 나는 이것을 prepareCustomMapper ()에 넣어 보았습니다. 그래서 이런 식으로 호출 될 때마다 injectedValues를 "정리"할 것이라고 생각했습니다.
this.mapper.setInjectableValues(null);
그러나 이것은 둘 다 작동하지 않았습니다.
injectableValues를 "설정 해제"하는 방법을 알고 있습니까? 또는 미래에 지속되지 않을 현재 매핑에 대한 injectableValues를 전달하는 방법. 지금부터 감사합니다!
'null'값을 삽입 할 수 있습니다.
final InjectableValues.Std injectableValues = new InjectableValues.Std();
injectableValues.addValue(HttpRestResponse.class, null);
emailsResponse = this.prepareCustomMapper().reader(EmailsResponse.class).withInjectableValues(injectableValues)
.readValue(response.getBody());
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다