在 Springboot 中将 HttpRequest 中的值绑定到对象时获取 null 值

问题描述 投票:0回答:1

我创建了一个 Webhook 服务器,它接受来自第三方 (Twilio) 的 POST 请求以进行消息传递回调,并且我将其反序列化为一个对象。 pojo 对象具有与 POST 请求中的属性名称相同的属性名称。

当我打印 pojo 对象时,我的 2 个字段为 null,其余字段已正确分配。

当我打印整个 POST 请求本身时,我发现这 2 个字段输入正确,但我不确定我做错了什么?

对于 pojo 类,我使用 Lombok 作为 getter 和 setter。

请求中出现的导致 null 的 2 个字段是电话号码,我将它们声明为字符串,因为它们以 JSON 形式传入。

代码如下:

@Data
@Getter
@Setter
public class StatusDeliveryModel {

    @JsonProperty("SmsSid")
    private String SmsSid;
    @JsonProperty("SmsStatus")
    private String SmsStatus;
    @JsonProperty("MessageStatus")
    private String MessageStatus;
    @JsonProperty("To")
    private String ToNumber;
    @JsonProperty("MessageSid")
    private String MessageSid;
    @JsonProperty("From")
    private String FromNumber;
    @JsonProperty("ApiVersion")
    private String ApiVersion;

}

@RestController
public class PostController {

    @Autowired
    private MyDataService myDataService;

    @PostMapping("/insert")
    public void insertIntoDatabase(@ModelAttribute StatusDeliveryModel statusDeliveryModel, HttpServletRequest request){

        System.out.println(statusDeliveryModel.toString());

        Enumeration<String> parameterNames = request.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            String paramName = parameterNames.nextElement();
            String paramValue = request.getParameter(paramName);
            System.out.println(paramName + "': " + paramValue);
        }
    }
}

这是回复:

StatusDeliveryModel(SmsSid=XXXXXXXXXXXXXXXXXXXXXXX, SmsStatus=queued, MessageStatus=queued, ToNumber=null, MessageSid=XXXXXXXXXXXXXXXXXXXXXXX, FromNumber=null, ApiVersion=2010-04-01)

SmsSid': XXXXXXXXXXXXXXXXXXXXXXX
SmsStatus': queued
MessageStatus': queued
To': +1518XXXXXXX
MessageSid': XXXXXXXXXXXXXXXXXXXXXXX
From': +1213XXXXXXX
ApiVersion': 2010-04-01

任何人都可以解释我做错了什么吗?

项目中的依赖项是:

  1. spring-boot-starter-jdbc
  2. mysql-连接器-j
  3. spring-boot-starter-web
  4. spring-boot-starter-测试
  5. 光CP
  6. 龙目岛
  7. spring-boot-starter-data-jpa

最后一个场景是我可以解析 HttpServletRequest 中的值并使用 setter 方法设置值,但我不想这样做。

spring-boot twilio lombok hikaricp
1个回答
0
投票

我需要查看请求正文才能判断您的绑定是否有问题,但总的来说,

@ModelAttribute
是一个 Spring MVC 概念,并且由于您没有要返回的视图,因此您可以请使用
@RequestBody
来代替。

© www.soinside.com 2019 - 2024. All rights reserved.