首页 > 解决方案 > 将空值从 Java bean 转换为 JSON

问题描述

我的流程如下。

在此处输入图像描述 我的问题是什么:

输入 json 请求的某些字段设置为“”。我希望响应 json 也将这些字段设置为“”。相反,这些字段被赋值为 null 或 0。

我需要什么: 如何设置字段以响应“”而不是 null 或 0?

代码:

JSON请求:

    {
    userID: "ABC",
    creationDate: "",
    noOfItems: "" 
}

豆定义:

class UserOrderDetails {
    private String userID;
    private LocalDate creationDate;
    private int noOfItems;

    public String getUserID() {
        return this.userID;
    }

    public void setUserID(String userID) {
        this.userID=userID;
    }
    public LocalDate getCreationDate() {
        return this.creationDate;
    }

    public void setCreationDate(LocalDate creationDate) {
        this.creationDate=userID;
    }   
    public int getNoOfItems() {
        return this.noOfItems;
    }

    public void setNoOfItems(int noOfItems) {
        this.noOfItems=noOfItems;
    }
}

控制器类:

class UserOrderCreationController {
@RequestMapping(value = "/createUserOrder", method = RequestMethod.POST)
    public ResponseEntity<?> createUserOrder(@RequestBody UserOrderDetails userOrderDetails , @RequestHeader HttpHeaders headers) throws Exception{
    //Some business logic to handle the user Order
    return new ResponseEntity<UserOrderDetails>(userOrderDetails, HttpStatus.CREATED);
    }
}

回复:

{
    userID: "ABC",
    creationDate: null,
    noOfItems: 0 
}

注意:我无法将 LocalDate、int - CreationDate 和 noOfItems 的数据类型更改为 String,因为它被许多其他类使用。

标签: javajsonjavabeansisnullorempty

解决方案


对于String字段,无论您发送的值将被保存并返回,对于DATE,Integer等其他数据类型,如果值为Balnk(“”)/null,则将JSON值转换为JAVA, object-mapper 将其转换为 null 并保存到 DB,相同的内容将作为响应返回。如果您希望 null 作为 "" 作为响应,您应该编写 customSerializer 它将 null 转换为 "" 作为响应。您需要使用
@JsonSerialize(using = ToStringSerializer.class)注释这些字段

ToStringSerializer.class 我们需要写。

解决方法:我有这个解决方法,你可以试试看。

公共类 AssignNullSerializer2 扩展 JsonSerializer {

public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider)
        throws IOException, JsonProcessingException
{
    // any JSON value you want...
    if(value==null) {
    jgen.writeString("");
    }
}

在 ApplicationConfiguration 添加下面的代码片段。

    ObjectMapper mapper = new ObjectMapper();
DefaultSerializerProvider sp=new DefaultSerializerProvider.Impl();
sp.setNullValueSerializer(new AssignNullSerializer2());
mapper.setSerializerProvider(sp);

它会将 DTO'S/Response Objects 中的所有空值转换为“”/Empty_String 我没有找到将其应用于特定字段的控件。


推荐阅读