Spring Boot配置两个MappingJackson2HttpMessageConverter实例

时间:2018-01-31 13:03:47

标签: java spring spring-mvc spring-boot

我遇到了新创建的Spring Boot应用程序的问题。出于某种原因,某些正在将两个 MappingJackson2HttpMessageConverter实例添加到Spring Web MVC的返回值处理中(我使用调试器发现了这一点)。 其中一个使用我在配置类中通过ObjectMapper方法创建的@Bean实例,另一个使用一些随机的其他实例。第二个ObjectMapper因此完全取消配置,我的ObjectMapper配置不适用于@ResponseBody使用的JSON序列化。

如何停止此重复?你可以在下面找到我的所有代码。

编辑:此问题与我的自定义ObjectMapper bean相关。即使我将其删除(除了@SpringBootApplication之外的完全空配置),我仍然会得到两个 MappingJackson2HttpMessageConverter个实例,其中一个使用完全未配置且无法访问(尽我所能)告诉)ObjectMapper

Edit²:这不是重复bean的问题。 ApplicationContext.getBeansOfType只为ObjectMapperMappingJackson2HttpMessageConverter返回一个实例,无论我是自己创建ObjectMapper还是通过spring自动配置创建buildscript { ext.springBootVersion = '2.0.0.RC1' repositories { mavenCentral() maven { url 'http://repo.spring.io/snapshot' } maven { url 'http://repo.spring.io/milestone' } maven { url 'http://repo.spring.io/libs-snapshot' } } dependencies { classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion" } } group 'de.takeweiland.springtest' version '1.0-SNAPSHOT' apply plugin: 'java' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' repositories { mavenCentral() maven { url 'http://repo.spring.io/snapshot' } maven { url 'http://repo.spring.io/milestone' } maven { url 'http://repo.spring.io/libs-snapshot' } } dependencies { compile "org.springframework.boot:spring-boot-starter-web" }

的build.gradle:

package main;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Main {

    @Bean
    public ObjectMapper createObjectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        return mapper;
    }

    public static void main(String[] args) {
        SpringApplication.run(Main.class);
    }
}

配置类

package main;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MyController {

    @GetMapping("**")
    @ResponseBody
    public String test() {
        return "Hello World";
    }
}

控制器:

$_POST

1 个答案:

答案 0 :(得分:0)

经过进一步调查后,我发现了这个问题,而这只是我杰克逊配置无法正常工作的问题。 有两个MappingJackson2HttpMessageConverter不是问题。