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

这是我测试结果:

clipboard.png

"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

详细错误信息
clipboard.png

如果不将后台请求参数改成order类json格式的string,应该如何正确接收?
图片有点模糊,请点击查看原图

阅读 10.2k
4 个回答

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注解。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题