java - 将空值从 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,因为它被许多其他类使用。
解决方案
对于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 我没有找到将其应用于特定字段的控件。
推荐阅读
- r - 如何根据列匹配有效地将这些 imdb 电影标题 ID 替换为实际标题?
- python - 根据单个单元格中的多个值对熊猫数据框进行排序
- java - 如何在 RCON 中读取服务器上的聊天记录
- python - Python aiohttp电机引擎
- json - SOAPUI:使用 groovy 运行测试步骤而不修改测试步骤主体
- amazon-web-services - aws elasticbeanstalk意外错误0000000001?
- python - 在 Numpy 中,如何根据元素的绝对值的最大值来选择元素?
- vue.js - UI 框架的“单个组件导入”实践是否使 Vue js 应用程序性能更好?
- python - 如何使用上下值按字母顺序对字符串列表进行排序?
- javascript - 无法读取 React JS Hook 中的道具