GET请求传参对象的list

本文档记录了一次在Java REST API中处理对象参数时遇到的问题。当尝试通过GET请求传递自定义对象列表时,最初遇到了类型转换错误。经过调试,发现需要将对象列表转换为JSON字符串在请求中传递,而在接收端直接使用JSONObject.parseArray()进行解析。最终,修复了JSON转换错误,使得请求成功。这个案例强调了在处理复杂类型参数时,正确转换和序列化的重要性。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值