我遇到了新创建的Spring Boot应用程序的问题。出于某种原因,某些正在将两个 MappingJackson2HttpMessageConverter
实例添加到Spring Web MVC的返回值处理中(我使用调试器发现了这一点)。
其中一个使用我在配置类中通过ObjectMapper
方法创建的@Bean
实例,另一个使用一些随机的其他实例。第二个ObjectMapper
因此完全取消配置,我的ObjectMapper
配置不适用于@ResponseBody
使用的JSON序列化。
如何停止此重复?你可以在下面找到我的所有代码。
编辑:此问题不与我的自定义ObjectMapper
bean相关。即使我将其删除(除了@SpringBootApplication
之外的完全空配置),我仍然会得到两个 MappingJackson2HttpMessageConverter
个实例,其中一个使用完全未配置且无法访问(尽我所能)告诉)ObjectMapper
。
Edit²:这不是重复bean的问题。 ApplicationContext.getBeansOfType
只为ObjectMapper
和MappingJackson2HttpMessageConverter
返回一个实例,无论我是自己创建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
答案 0 :(得分:0)
经过进一步调查后,我发现了这个问题,而这只是我杰克逊配置无法正常工作的问题。
有两个MappingJackson2HttpMessageConverter
不是问题。