를 사용하여 I는 클래스 정의 :@JsonRootName/UnrecognizedPropertyException :로 인식 할 수없는 필드 .../자바 기반 구성
: 내 응용 프로그램에서 새 ComponentBean을 만들려고에, 자바로 구성 는@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
... other config not shown for brevity
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> pArgumentResolvers) {
pArgumentResolvers.add(this.getCurrentUserHandlerMethodArgumentResolver());
}
@Bean
public ObjectMapper getJackson2ObjectMapperFactoryBean() {
final Jackson2ObjectMapperFactoryBean mapper = new Jackson2ObjectMapperFactoryBean();
mapper.setIndentOutput(true);
mapper.setSimpleDateFormat("MM/dd/yyyy HH:mm:ss");
mapper.setFeaturesToEnable(DeserializationFeature.UNWRAP_ROOT_VALUE);
mapper.setFeaturesToDisable(SerializationFeature.INDENT_OUTPUT);
mapper.setFeaturesToEnable(SerializationFeature.WRAP_ROOT_VALUE);
final Map<Class<?>, JsonDeserializer<?>> deserializers = new HashMap<Class<?>, JsonDeserializer<?>>();
deserializers.put(...) // customer deserializers -- ComponentBean is not one of them
mapper.setDeserializersByType(deserializers);
mapper.afterPropertiesSet();
final ObjectMapper objectMapper = mapper.getObject();
objectMapper.registerModule(new JodaModule()); // register custom joda time serializer
return objectMapper;
}
@Bean
public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(this.getJackson2ObjectMapperFactoryBean());
return converter;
}
나는 예외를받을
이제는 이전에 XML 기반 구성을 사용하여 구성한 방식으로 작동하지만 Java 기반 구성을 사용하도록 전환했습니다.이 구성은 내가 얻을 수없는 유일한 구성 요소 인 것으로 보입니다. 올바르게 작동.
내 XML 기반의 설정은 이것이다 :
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="com.aoins.sales.user.CurrentUserHandlerMethodArgumentResolver" />
</mvc:argument-resolvers>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
p:indentOutput="true" p:simpleDateFormat="MM/dd/yyyy HH:mm:ss">
<property name="featuresToEnable">
<array>
<util:constant static-field="com.fasterxml.jackson.databind.DeserializationFeature.UNWRAP_ROOT_VALUE" />
</array>
</property>
<property name="featuresToDisable">
<array>
<util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT" />
</array>
</property>
<!-- Add deserializers that require autowiring -->
<property name="deserializersByType">
<map key-type="java.lang.Class">
<entry key="...">
<bean class="..." />
</entry>
</map>
</property>
</bean>
내 질문은 이것을 자바 기반 구성 제대로 작동하게하는 방법이다. 봄에 json 루트를 인식하기위한 주석이 누락 되었습니까? 내 ObjectMapper, 추가 설정에 추가해야 할 또 다른 주석이 있습니까? 아니면 ComponentBean에 대한 사용자 정의 직 병렬 변환기를 만들 필요가 있습니까? @JsonRootName을 사용하면을 사용해야하므로 ComponentBean에 대한 사용자 지정 직렬화기를 만드는 것을 피하려고합니다. 작업)?
몇 가지 유의할 점은 모든 속성을 사용해야하기 때문에 이러한 속성을 무시하고 싶지는 않습니다.