【Java】springboot请求参数是一个类,类中含有list
如题。
后台controller:
@RequestMapping("generatorOrder")public TMessage generatorOrder(Order order) {
...其他代码
}
order类:
public class Order implements Serializable {private Long orderId;
private BigDecimal sum;
/**
* 订单创建时间
*/
private Timestamp gmtCreate;
private transient List<OrderDetail> detailList;
}
这是我测试结果:
"defaultMessage": "Failed to convert property value of type 'java.lang.String' to required type 'java.util.List' for property 'detailList'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'cn.tianyustudio.coffeehouseinterface.entity.OrderDetail' for property 'detailList[0]': no matching editors or conversion strategy found","objectName": "order",
"field": "detailList",
"rejectedValue": "{\"orderId\":1,\"foodId\":null,\"num\":10}",
"bindingFailure": true,
"code": "typeMismatch"
意思是string无法转成list
详细错误信息
如果不将后台请求参数改成order类json格式的string,应该如何正确接收?
图片有点模糊,请点击查看原图
回答
1 新建类
public class OrderDetailConverter implements AttributeConverter<List<OrderDetail>, String> { private ObjectMapper mapper = new ObjectMapper();
private String EMPTY = "[]";
private TypeReference typeReference = new TypeReference<List<Parcel>>(){};
@Override
public String convertToDatabaseColumn(List<OrderDetail> list) {
try {
return mapper.writeValueAsString(list);
} catch (JsonProcessingException e) {
return EMPTY;
}
}
@Override
public List<OrderDetail> convertToEntityAttribute(String json) {
return mapper.readValue(json, typeReference);
}
}
2 在实体上增加注解
@Convert(converter = OrderDetailConverter.class) private List<OrderDetail> orderDetail = new ArrayList<>();
上面给出了一个统一处理的办法,如果只是这个特定需求,那就用字符串接收呗。
比如拼接成字符串用,
隔开,后台拿到后split
一下也没什么问题。
还可以用数组接收啊。
我现在在后台接收字符串(json格式的),再将字符串转成对应的类,就可以了。
给参数增加requestbody注解。
以上是 【Java】springboot请求参数是一个类,类中含有list 的全部内容, 来源链接: utcz.com/a/88001.html