Post请求,请求成功,但参数为null

问题描述

1.使用Postman测试写的接口时,发现错误,请求可以接收,但是参数为空,

@RestController
@RequestMapping("tsetApi")
public class CompareController {
​
    @PostMapping("query1")
    public String getTestPost1(@RequestParam(name="id",required = false) String id, @RequestParam(name="name",required = false) String name){
        System.out.println(id+name);
        return "1";
    }
​
    @PostMapping("query2")
    public String getTestPost2(@RequestBody UserInfo userInfo){
        System.out.println(userInfo.toString());
        return "1";
    }
​
    @Data
    public class UserInfo {
​
        private String id;
​
        private String name;
    }
​
}

调用第一个接口,请求成功,始终拿不到值,Postman请求参数

 

解决方式:

将 Postman 的传参改为 x-www-form-urlencoded 就可以了。

是因为 @RequestParam 接受JSON时,PostMan的body应选择 x-www-form-urlencoded ,否则使用 json 格式,会导致数据为 null

2.调用第二个接口时,提示如下:

关键字:non-static inner classes like this can only by instantiated using default, no-argument constructor

2021-10-19 11:57:28.726  WARN 18112 --- [nio-9011-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.turing.compare.controller.CompareController$UserInfo` (although at least one Creator exists): non-static inner classes like this can only by instantiated using default, no-argument constructor; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.turing.compare.controller.CompareController$UserInfo` (although at least one Creator exists): non-static inner classes like this can only by instantiated using default, no-argument constructor
 at [Source: (PushbackInputStream); line: 2, column: 5]]

json转内部类对象时出错。像这样的非静态内部类只能通过使用默认的无参数构造函数实例化

因此会导致,请求成功了,但是参数信息没有发送过来。

解决方式:

将 非静态内部类转为静态内部类,添加 static 关键字即可。

@Data
public static class UserInfo {
​
    private String id;
​
     private String name;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值