我想在我的项目中使用JacksonObjectMapper
的配置版本(忽略空值和snake_case,也使用一些自定义模块)。
在我的大型项目中,我无法让Spring MVC真正使用这个映射器。
buildscript {
ext {
springBootVersion = '1.5.6.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter')
compile("org.springframework.boot:spring-boot-starter-jetty:${springBootVersion}")
compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}")
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.8.8'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.8'
testCompile('org.springframework.boot:spring-boot-starter-test')
}
spring:
application:
name: Jackson test
jackson:
property-naming-strategy: SNAKE_CASE
default-property-inclusion: non_empty
debug: true
public class MyLocationEntity {
public String nameAndSnake;
}
@Configuration
@EnableWebMvc
public class AppConfig {
}
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private ObjectMapper objectMapper;
@RequestMapping(value = "/test", produces = "application/json")
public MyLocationEntity test() throws JsonProcessingException {
MyLocationEntity location = new MyLocationEntity();
location.nameAndSnake = "hello world";
String expexted = objectMapper.writeValueAsString(location);
return location;
}
}
如果我现在查看调试器中expected
的值,它是{“name_and_snake”:“hello world”}
。但是如果我让控制器运行,实际的响应是{“nameandsnake”:“hello world”}
。
当我删除@enableWebMVC
时,它就可以工作了。如何将配置的映射器与MVC一起使用,而不删除Web MVC的其余自动配置?
这不仅从Javadocs中可以看出,而且@enableWebMVC
禁用了由WebMVcautoConfiguration
提供的Spring Boot默认web MVC自动配置,包括使用由application.yml
属性配置的JacksonObjectMapper
bean。根据Spring Boot参考文档:
完全控制MVC配置的最简单方法是使用@enableWebMVC
注释提供您自己的@configuration
。这样做将所有MVC配置都掌握在您的手中。
因此,必须手动配置MVC配置,以便将Spring Bootapplication.yml
属性与@enableWebMVC
注释协同使用。对此有几种不同的可能方法。
第一种方法是从webmvcautoconfiguration.enablewebmvcconfiguration.configureMessageConverters()
复制Spring Boot配置代码。这将用默认Spring Boot配置中使用的消息转换器替换消息转换器-- 包括MappingJackson2HttpMessageConverter
,其中包含未配置的ObjectMapper
- :
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private ObjectProvider<HttpMessageConverters> messageConvertersProvider;
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
this.messageConvertersProvider
.ifAvailable((customConverters) -> converters.addAll(customConverters.getConverters()));
}
}
或者,不使用消息转换器的默认Spring Boot列表,也可以只交换Spring Boot提供的ObjectMapper
或MappingJackson2HttpMessageConverter
bean(它们应用了application.yml
属性):
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private ObjectMapper objectMapper;
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.stream()
.filter(c -> c instanceof MappingJackson2HttpMessageConverter)
.map(c -> (MappingJackson2HttpMessageConverter) c)
.forEach(c -> c.setObjectMapper(objectMapper));
}
}
或
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (int i = 0; i < converters.size(); i++) {
if (converters.get(i) instanceof MappingJackson2HttpMessageConverter) {
converters.set(i, mappingJackson2HttpMessageConverter);
}
}
}
}
我有教育问题: 存在具有windows server 2003(AD)的虚拟机,其中包含用户及其密码。已建立与机器的连接(ip:192.168.56.101:389)。 Web应用程序的目的是使用户能够在AD中更改他的密码。 问题:无法配置到windws server 2003的连接。 我从这个教程开始https://spring.io/guides/gs/authenticating-ldap/
我正在用SpringBoot配置Consor,并在这里找到了一个文档。即使浏览了其他资源,也没有找到其他配置或场景。 因此,我很好奇当springboot应用程序与consul集成时是否只有这些配置可用。我想深入了解,有人能让我知道任何其他可用的属性吗?
我正在尝试将Apache shiro 1.7.0添加为安全管理器,您会发现我的配置类: shiro的pom.xml条目: 该项目编译成功,但我得到了上面的错误,而试图访问web应用程序,我感谢任何麻或建议。 启动Tomcat上下文时出错。异常:org.springframework.beans.factory.beancreationexception。消息:创建类路径资源[org/apache/
在我向Maven添加了HATEOAS的依赖项之后,Spring Boot不会启动: 添加得依赖项: unsatisfiedDependencyException:创建名为“Security Config”的bean时出错:通过方法“Set ContentNegotationStrategy”参数0表示的不满足依赖项;嵌套异常为org.springframework.beans.factory.un
<dependencyManagement> <dependencies> <dependency> <!--Import dependency management from SpringBoot--> <groupId>org.springframework.boot</groupId>
我有在openshift中运行的springboot和非springboot(Eclipse Microprofile)Rest API。两者都有服务endpoint端口9443 SpringBoot度量路径-/actuator/Prometheus Eclipse micro profile度量路径/度量 Eclipse微配置文件抓取配置 Spring靴刮擦配置 由于MP指标在springboo