【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;

}

这是我测试结果:

【Java】springboot请求参数是一个类,类中含有list

"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

详细错误信息
【Java】springboot请求参数是一个类,类中含有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

回到顶部