1.错误示范
@ApiOperation("发送设备安全通知")
@PostMapping("/sendSafeMessage1")
public void test1010(@RequestBody List<String> listCode) {
// 获取电话列表
List<String> phoneNumber = new ArrayList<>();
listCode.forEach(item -> {
List<SupEnterprise> supEnterpriseList = supEnterpriseMapper.selectList(
new MyLambdaQueryWrapper<SupEnterprise>()
.eq(SupEnterprise::getCreditCode, item)
);
if (ObjectUtils.isNotNull(supEnterpriseList)) {
phoneNumber.add(supEnterpriseList.get(0).getContactPhone());
}
});
System.out.println(phoneNumber);
}
问题1:
运行报错
JSON parse error: Cannot deserialize instance of java.util.ArrayList<java.lang.Object> out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.ArrayList<java.lang.Object> out of START_OBJECT token
at [Source: (PushbackInputStream); line: 1, column: 1]
原因:参数字段不匹配,比如我这里写的后端接口接受的参数是数组(@RequestBody List< String> customers),但是传参又是一个json数据,没对应好(如下图
(前端传入的为json对象,但是这里设置入参为List<String>
(1)传json报错
(2)传list,成功
2.改为
@ApiOperation("发送设备安全通知")
@PostMapping("/sendSafeMessage")
public R<Object> sendSafeMessage(@RequestBody ListCode param) throws IOException {
List<String> listCode = param.getListCode();
// 获取电话列表
List<String> phoneNumber = new ArrayList<>();
listCode.forEach(item -> {
List<SupEnterprise> supEnterpriseList = supEnterpriseMapper.selectList(
new MyLambdaQueryWrapper<SupEnterprise>()
.eq(SupEnterprise::getCreditCode, item)
);
if (ObjectUtils.isNotNull(supEnterpriseList)) {
phoneNumber.add(supEnterpriseList.get(0).getContactPhone());
System.out.println("手机号内"+supEnterpriseList.get(0).getContactPhone());
}
});
@Data
public class ListCode {
@ApiModelProperty("信用代码列表")
private List<String> listCode;
}
将List<String> listCode封装起来。
问题2:
为什么
public R<Object> sendSafeMessage(@RequestBody ListCode param) throws IOException {
List<String> listCode = param.getListCode();
...
}
public R<Object> sendSafeMessage(@RequestBody ListCode listCode) throws IOException {
...
}
为什么以上代码不能改成以下代码,直接用listCode;
因为listCode为封装的ListCode中的一个属性,listCode.getListCode();这样获取会报错。
需要用param来先把listCode取出来,然后传给listCode
@Data
public class ListCode {
@ApiModelProperty("信用代码列表")
private List<String> listCode;
}