将空值从 Java bean 转换为 JSON

Converting empty values from Java bean to JSON

我的流程如下。

我的问题是什么:

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

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

代码:

JSON 请求:

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

Bean 定义:

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:

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,因为它被许多其他 classes 使用。

对于String字段,无论你发送什么值,都会被保存并返回,对于其他数据类型,如DATE,Integer,同时将JSON值转换为JAVA如果值为 Balnk("")/null,则对象映射器将其转换为 null 并保存到 DB,同样会作为响应返回。 如果您希望 null 作为 "" 作为响应,您应该编写 customSerializer,它将 null 转换为 "" 作为响应。 您需要用
注释这些字段 @JsonSerialize(使用=ToStringSerializer.class)

ToStringSerializer.class我们要写。

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

public 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对象中的所有空值转换为""/Empty_String 我没有找到将其应用于特定领域的控件。