【问题标题】:Converting empty values from Java bean to JSON将空值从 Java bean 转换为 JSON
【发布时间】:2018-06-08 18:22:48
【问题描述】:

我的流程如下。

我的问题是什么:

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

【问题讨论】:

标签: java json javabeans isnullorempty


【解决方案1】:

对于String字段,无论你发送什么值都会被保存并返回,对于其他数据类型,例如DATE,Integer,同时将JSON值转换为JAVA如果值为Balnk("")/ null,对象映射器将其转换为 null 并保存到 DB,将返回相同的响应。 如果您希望 null 作为 "" 作为响应,您应该编写 customSerializer 它将 null 转换为 "" 作为响应。 您需要用
注释这些字段 @JsonSerialize(使用 = 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 添加下面的 sn-p。

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

它会将 DTO'S/Response 对象中的所有空值转换为 ""/Empty_String 我没有找到将其应用于特定领域的控件。

【讨论】:

  • 我尝试使用自定义序列化程序和@JsonSerialize(使用= CustomDateSerializer.class)。根据stackoverflow.com/questions/35342323/jsonserialize-not-working,它不适用于空值。您还知道其他可能有用的方法吗?
  • 我也试过@JsonSerialize(nullsUsing = CustomDateSerializer.class),但是没有调用序列化器类。
  • 你是对的。默认情况下对于空值CustomSerializer 将不起作用!
  • 你能试试我在上面编辑的评论中提到的解决方法吗?
  • 谢谢。我会尝试解决方法,然后告诉你它是怎么回事。
猜你喜欢
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多