我创建了一个 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
任何人都可以解释我做错了什么吗?
项目中的依赖项是:
最后一个场景是我可以解析 HttpServletRequest 中的值并使用 setter 方法设置值,但我不想这样做。
我需要查看请求正文才能判断您的绑定是否有问题,但总的来说,
@ModelAttribute
是一个 Spring MVC 概念,并且由于您没有要返回的视图,因此您可以请使用 @RequestBody
来代替。