有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在jackson使用注释的反序列化过程中强制执行ACCEPT_SINGLE_VALUE_AS_数组

有没有办法对类中的列表属性使用注释来使用ACCEPT_SINGLE_VALUE_AS_ARRAY中的Jackson?我正在使用Spring并得到以下异常

nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token

假设我的课程如下:

public class MyClass {

    private List < String > value;
}

我的JSON结构如下:

案例1:

[{"operator": "in", "value": ["Active"], "property": "status"}]

案例2:

[{"operator": "like", "value": "aba", "property": "desc"}]

我应该使用什么注释让框架知道我希望在反序列化时对这两个案例进行相同的处理

更新: 为了更清晰,我将更新内容移至本文中的答案


共 (2) 个答案

  1. # 1 楼答案

    可以使用@JsonFormat注释

    public class MyClass {
    
        @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
        private List<String> value;
    
    }
    

    要处理这个问题,你需要有杰克逊版本^{。您还可以使用其他可用的JsonFormat Features

    对于2.6版。x

    @Autowired private ObjectMapper mapper;
    //...
    
    mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
    
    • 将此代码添加到Initializer Class
    • 或者您可以直接在Bean Configuration中配置Jackson

    这些方法可以解决这个问题,但每个deserialization进程都会激活它

  2. # 2 楼答案

    如果此项目是Spring项目,则可以将此属性放入application.properties

    spring.jackson.deserialization.UNWRAP_SINGLE_VALUE_ARRAYS=true