【问题标题】:how to convert a null list to an empty list?如何将空列表转换为空列表?
【发布时间】:2020-07-20 17:10:03
【问题描述】:

在我的 crud 应用程序中,post api 接收以下正文

@Data
@AllArgsConstructor
@NoArgsConstructor
public class BodyRequest {

    private String description;
    private List<Request> ListRequest; 
}

当 listRequest 未在请求正文中传递时,它变为 null 当 listRequest 列表为空时,有什么方法可以为它设置一个空值? 我想知道是否有可能在列表中添加一个注释,允许@value或@json等修改

我尝试添加 @JsonDeserialize(使用 = OptimizedListDeserializer.class)到列表并定义 OptimizedListDeserializer 类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class BodyRequest {

    private String description;
    @JsonDeserialize (using = OptimizedListDeserializer.class)
    private List<Request> ListRequest; 
}

public class OptimizedListDeserializer extends StdDeserializer<List<Request> > {


    protected OptimizedListDeserializer(StdDeserializer<?> src) {
        super(src);
        // TODO Auto-generated constructor stub
    }

    @Override
    public List<Request>  deserialize(JsonParser jp, DeserializationContext ctxt)
            throws IOException {
           return new ArrayList<>();
    }
}

但是当我尝试调用服务时,我得到了

"code": 415,
"error": "Content type 'application/json;charset=UTF-8' not supported"

【问题讨论】:

  • 自己创建一个 noArgs 构造函数,并初始化它。
  • 或者内联初始化。
  • 也许你想构建自己的反序列化器baeldung.com/jackson-deserialization
  • @Robertiano 他们绝对不想那样做。

标签: java spring jpa jackson


【解决方案1】:

从杰克逊 2.9 开始,你得到了这个: @JsonSetter(nulls = Nulls.AS_EMPTY) public void setStrings(List<String> strings) { this.strings = strings; }

【讨论】:

    【解决方案2】:

    最简单的方法是像这样在类中初始化列表

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class BodyRequest {
    
        private String description;
        private List<Request> ListRequest = new ArrayList(); 
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-15
      • 2020-09-03
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 2011-01-13
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多