Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用自动连线属性的Spring反序列化-可以手动重用吗?_Java_Spring_Deserialization - Fatal编程技术网

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
for
ObjectMapper
不起作用。寻找一些帮助,我想不出如何获得完全相同的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;