Java 使用自动连线属性的Spring反序列化-可以手动重用吗?
我有一个对象Java 使用自动连线属性的Spring反序列化-可以手动重用吗?,java,spring,deserialization,Java,Spring,Deserialization,我有一个对象doc,它有自己的注释反序列化程序,即 @JsonSerialize(using = DocDeSerializer.class) public class Doc { 反序列化程序看起来像 @Service public class DocDeserializer<T> extends JsonDeserializer<Doc> i{ @Autowired private PropertyController ctrlProp; @Override p
doc
,它有自己的注释反序列化程序,即
@JsonSerialize(using = DocDeSerializer.class)
public class Doc {
反序列化程序看起来像
@Service
public class DocDeserializer<T> extends JsonDeserializer<Doc> i{
@Autowired
private PropertyController ctrlProp;
@Override
public Doc deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
...
失败了。原因是自动连线类未正确启动,即未启动ctrlProp
(null
)。所以,我的问题是:
有没有一种简单的方法可以重用Spring中的反序列化程序?如果是,怎么做
更新:
经过调查,我发现这与HttpConverts的配置有关。所以我的配置看起来像:
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
@Primary
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
converter.setObjectMapper(builder.build());
return converter;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
....
converters.add(mappingJackson2HttpMessageConverter());
}
}
但不知何故,这也失败了:-(为了清楚起见,尝试了什么…您正在手动创建
ObjectMapper
,通过new
,这样@服务
显然不存在。我认为如果您从Spring上下文中获得ObjectMapper
,例如,原则上通过@Autowired
,这将起作用nds很好-但我不知道如何实际操作。例如,@Autowired
forObjectMapper
不起作用。寻找一些帮助,我想不出如何获得完全相同的Spring实例进行反序列化:-/Cuz只有精确的才会正确启动@Autowired
对象。您是哪种Spring版本的u使用?很多人说它与@Autowired
一起工作(例如,我的项目也是如此)…Spring MVC,5.0.7…按照您提到的建议,我在启动时遇到异常没有“com.fasterxml.jackson.databind.ObjectMapper”类型的合格bean可用:预期至少1…
,即:-/并且来自同一答案的其他方法也不起作用:-/或者至少我不知道如何使它起作用:-(好吧,我真的帮不了你,不知道你的设置和为什么不起作用:|
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
@Primary
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
converter.setObjectMapper(builder.build());
return converter;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
....
converters.add(mappingJackson2HttpMessageConverter());
}
}
@RestController
public class MyClass
@Autowired
private MappingJackson2HttpMessageConverter myJackson;