【问题标题】:Spring and serialization to Json - how to customize globally Jackson without Spring BootSpring和序列化到Json - 如何在没有Spring Boot的情况下全局自定义Jackson
【发布时间】:2022-06-22 02:02:12
【问题描述】:

我正在使用没有 Spring Boot 的干净的 Spring MVC 框架 (v5.3.21)。 我正在使用 Gson 库,Spring 使用它来序列化视图模型,并返回请求方法。

 public class Coffee {
    String name = "n";
    String brand = "b";
 }
    
 @RequestMapping(value={"/coffe"}, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
 public Coffee getCoffee() {
    return new Coffee();
 }

最近我在类路径中添加了 Jackson (v 2.13.3),我注意到序列化的工作方式大不相同。首先 - 在默认序列化的 Gson 非私有字段中,现在它们在客户端不可见。 我知道我可以添加注释

@JsonAutoDetect(fieldVisibility = Visibility.NON_PRIVATE)

到所有模型类,或将字段更改为公共(据我所知,杰克逊默认字段的可见性是公共的)。 但是我只想在配置中全局更改一次,而无需重写许多代码

我尝试了很多选项,但是没有 Spring Boot,它们都不起作用。 你知道用干净的 Spring 来改变这个默认设置吗?

【问题讨论】:

    标签: spring spring-mvc jackson jackson-databind


    【解决方案1】:

    您可以创建ObjectMapper bean,它可以是全局应用程序

    public ObjectMapper objectMapper() {
    
        ObjectMapper mapper  = new ObjectMapper();
        mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.NON_PRIVATE));
    
        return mapper;
     }
    

    【讨论】:

    • 带@Bean注解?这个我试过了,不行。 ObjectMapper 对象可能是由 MappingJackson2JsonView 和 Jackson2ObjectMapperBuilder 独立创建的。
    猜你喜欢
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2017-01-30
    • 2020-12-23
    • 2018-11-07
    • 1970-01-01
    • 2017-09-09
    • 2016-12-31
    相关资源
    最近更新 更多