如何与Jackson一起全局定义命名约定

dye*_*yes 4 java spring jackson spring-boot

我在Spring上使用Jackson。我有几种这样的方法:

@RequestMapping(value = "/myURL", method = RequestMethod.GET)
public @ResponseBody Foo getFoo()  {
    // get foo
    return foo;
}
Run Code Online (Sandbox Code Playgroud)

序列化的Foo类很大,并且有很多成员。使用注释或自定义序列化程序可以进行序列化。

我唯一不知道的是如何定义命名约定。我想对所有序列化使用snake_case。

那么,如何为全局定义序列化的命名约定?

如果不可能的话,则必须采用本地解决方案。

dim*_*sli 5

不确定如何全局执行此操作,但是这是在JSON对象级别而不是针对每个单独属性执行此操作的方法:

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class Foo {
    private String myBeanName;
    //...
}
Run Code Online (Sandbox Code Playgroud)

将产生json:

{
    "my_bean_name": "Sth"
    //...
}
Run Code Online (Sandbox Code Playgroud)


dye*_*yes 5

其实,有一个非常简单的答案:

@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
    Jackson2ObjectMapperBuilder b = new Jackson2ObjectMapperBuilder();
    b.propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
    return b;
}
Run Code Online (Sandbox Code Playgroud)

我将它添加到我的主要内容中,如下所示:

@SpringBootApplication
public class Application {
    public static void main(String [] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public Jackson2ObjectMapperBuilder jacksonBuilder() {
        Jackson2ObjectMapperBuilder b = new Jackson2ObjectMapperBuilder();
        b.propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
        return b;
    }
}
Run Code Online (Sandbox Code Playgroud)