Bootstrap

GET请求传参对象的list

之前试过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即可。

;