之前试过get请求传参是数组,但是试的都是基本类型,现在需求要是自定义的对象,怕写的不对,就提前自测了一下。
调用方代码:
@Resource
private TestClient testClient;
@Test
public void apiTest(){
List<UserVO> list= new ArrayList<>();
UserVO t = new UserVO();
t.setBizId(10);
t.setUserId("015df69a31c21000");
t.setType(2);
UserVO s = new UserVO();
s.setBizId(10);
s.setUserId("015ef2d84fc21000");
s.setType(2);
list.add(t);
list.add(s);
Map<String,Object> params = new HashMap<>();
params.put("userVOS", list);
JSONObject res = testClient.test(params);
System.out.println(res);
}
客户端代码:
@RestController
@RequestMapping("/inner/user")
public class UserInnerController {
@GetMapping("/batch")
public R<?> batchGetUser(@RequestParam("userVOS") List<UserVO> userVOS){
return R.success();
}
这种情况是直接报错,提示类型转换错误,String没法直接转为对象,所以想到了通过json来转换对象。
客户端改为如下代码:
@RestController
@RequestMapping("/inner/user")
public class UserInnerController {
@GetMapping("/batch")
public R<?> batchGetUser(@RequestParam("userVOS") String userVOS){
List<UserVO> data = JSONObject.parseArray(JSON.toJSONString(userVOS),UserVO.class);
return R.success();
}
依旧报错,但是报错信息变为json转换时候的问题,想到可能是发参数的时候没有转为json字符串,修改请求方代码:
params.put("userVOS", JSON.toJSONString(list));
此时依旧报错,还是json解析时的错误,请求时候传递了json字符串,接收没必要再转,去掉客户端代码改为:
List<UserVO> data = JSONObject.parseArray(userVOS,UserVO.class);
此时请求成功。
所以,请求时要转为json字符串,接收时直接parse即可。