将空值从 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
我没有找到将其应用于特定领域的控件。
我的流程如下。
输入 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 我没有找到将其应用于特定领域的控件。