我一直找不到如何在spring boot 1.4中使用Jackson2ObjectMapperBuilderCustomizer.定制jackson特性的示例。
Boot1.4中自定义jackson的DOCO-https://docs.spring.io/spring-boot/docs/1.4.x/reference/htmlsingle/#howto-customize-the-对象映射器
我的配置工作正常,尽管我不确定这是否是使用Jackson2ObjectMapperBuilderCustomizer自定义对象映射器的正确方法。Java
@Configuration
public class JacksonAutoConfiguration {
@Autowired
private Environment env;
@Bean
public Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder(
List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
Jackson2ObjectMapperBuilder builder = configureObjectMapper();
customize(builder, customizers);
return builder;
}
private void customize(Jackson2ObjectMapperBuilder builder,
List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
for (Jackson2ObjectMapperBuilderCustomizer customizer : customizers) {
customizer.customize(builder);
}
}
private Jackson2ObjectMapperBuilder configureObjectMapper() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
List<String> activeProfiles = asList(env.getActiveProfiles());
if (activeProfiles.contains(SPRING_PROFILE_DEVELOPMENT)) {
builder.featuresToEnable(SerializationFeature.INDENT_OUTPUT);
}
return builder;
}
}
为了提供一些上下文,这个类位于我自己的REST服务的spring starter项目中,该项目只是自动配置一些东西,如ControllerAdvice和一些琐碎的特性,如上面所述。
所以我的目标是扩展jackson配置,而不是覆盖引导或其他包提供的任何配置。
这取决于你想做什么。
如果您想在默认情况下执行的自定义之外进行一些自定义,那么您应该创建自己的Jackson2ObjectMapperBuilderCustomizer
实现并将其公开为bean。您目前拥有的是一个更复杂的版本。您可以创建自己的定制器bean,并由Boot为您调用它,而不是注入定制器然后自己调用它们。
如果您想要完全控制并关闭所有的boot自定义,那么创建一个jackson2objectmapperbuilder
或objectmapper
bean并根据需要进行配置。builder方法是首选的,因为这个builder还用于配置由其他组件创建的ObjectMappers,例如spring数据REST。
回顾一下您的代码,退一步来看,您可以通过使用特定于配置文件的配置文件(类似于application-dev.properties
)来实现对jackson输出的缩进,从而更加简单地配置事情。你可以在这里读到更多关于它的内容。
为了自定义已经由spring boot预先配置的jacksonobjectmapper
,我可以这样做(这里的示例是添加一个自定义反序列化器)。
配置类:
@SpringBootConfiguration
public class Application {
@Autowired
private BigDecimalDeserializer bigDecimalDeserializer;
...
@Bean
public Jackson2ObjectMapperBuilderCustomizer addCustomBigDecimalDeserialization() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.deserializerByType(BigDecimal.class, bigDecimalDeserializer);
}
};
}
...
}
和我的自定义反序列化器,来展示它是如何被spring接收的:
@Component
public class BigDecimalDeserializer extends StdDeserializer<BigDecimal> {
public BigDecimalDeserializer() {
super(BigDecimal.class);
}
@Override
public BigDecimal deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
...
}
...
}
问题内容: 可以改变外观吗? 问题答案: 您不能对控件本身进行太多修改。 由于单击与输入正确配对的元素会激活/聚焦它,因此我们可以使用a 触发OS浏览对话框。 这是您的操作方法… 表单控件的CSS将使它看起来不可见,并且不会在文档布局中占用空间,但是仍然 存在, 因此可以通过激活它。 如果要在选择后显示用户选择的路径,可以使用JavaScript侦听事件,然后读取浏览器提供给您的路径(出于安全原因
我有一个简单的SpringBoot应用程序,其结构如下: 我使用的是标准应用程序。yml文件,其中存储了所有必要的道具,并在必要时使用@ConfigurationProperties注释注入它们。 现在对于一个bean,我有很多道具,我不想压倒我的普通应用程序。yml文件和所有的道具。所以我想要一个单独的(我把它放在类路径中的service dir下)。 根据Spring文档,我可以使用这样的东西
在spring boot中@RequestBody内容到达控制器之前,我如何覆盖它? > 此外,我还搜索了Request estBodyAdviceAdapter。 有几个链接对spring boot不起作用。 如何多次读取request.getInputStream() 如何在Spring引导到达控制器之前修改请求正文 现在,我可以将输入流读入字符串中,进行一些修改并设置回控制器的输入流吗?
我在学习Spring Boot时遇到了一些编码问题;我想添加一个像Spring3.x那样的CharacterEncodingFilter。就像这样:
10.1 配置日志 10.1.1 在配置文件中配置 在application.properties中添加 server.tomcat.accesslog.enabled=true server.tomcat.accesslog.directory=d:/temp/logs 10.2 EmbeddedServletContainerCustomizer接口,通过代码配置tomcat package
因此,我正在进行我的第一个Spring Boot项目,我一直在进行测试。我查了很多例子,但似乎都不管用。 这是我的控制器的当前测试: 这是可行的,但在sonarqube上,我发现我的代码覆盖率为0%,而我似乎找不到一个测试,它的覆盖率甚至超过了零。有谁能给我一个关于如何为控制器编写一个好的单元测试的例子,然后我就可以根据您的例子自己解决这个问题。 这是我的控制器: 这是我的服务(以防您需要): 还