【问题标题】:Spring @RequestBody OverrideSpring @RequestBody 覆盖
【发布时间】:2014-10-26 02:13:36
【问题描述】:

我有一个 Spring 控制器,它可以接收帖子并且它可以工作。唯一的问题是我们的 SMS 提供商将向我们发送包含首字母大写的键的标头,例如:

 {
"FromPhoneNumber":"15177754077",
"ToPhoneNumber":"17572046106",
"ResponseReceiveDate":"7/29/2014 5:25:10 AM",
"Message":"PIN 1234"
}

Spring 会抛出如下错误:

    Could not read JSON: Unrecognized field "FromPhoneNumber" (class com.talksoft.spring.rest.domain.CDynePost), not marked as ignorable (4 known properties: "responseReceiveDate", "toPhoneNumber", "fromPhoneNumber", "message"])

所以,我必须有一种方法来覆盖这种行为。这是处理 CDyne 帖子的控制器方法:

    @RequestMapping(method = RequestMethod.POST, value="/celltrust")
    public ResponseEntity<String> cellTrustPost(@RequestBody CDynePost cDynePost) {
        String message = "FAILED";
        UserInteraction userInteraction = getUserInteraction(cDynePost);
        boolean success = someSpringService.logMessage(userInteraction);

        if (success) {
            message = "OK";
            return new ResponseEntity<String>(message, HttpStatus.ACCEPTED);
        } else {
            return new ResponseEntity<String>(message, HttpStatus.FAILED_DEPENDENCY);
        }       

    }

这里是 CDynePost 类:

public class CDynePost {
    private String FromPhoneNumber;
    private String ToPhoneNumber;
    private String ResponseReceiveDate;
    private String Message;

    public String getFromPhoneNumber() {
        return FromPhoneNumber;
    }
    public void setFromPhoneNumber(String FromPhoneNumber) {
        this.FromPhoneNumber = FromPhoneNumber;
    }
    public String getToPhoneNumber() {
        return ToPhoneNumber;
    }
    public void setToPhoneNumber(String ToPhoneNumber) {
        this.ToPhoneNumber = ToPhoneNumber;
    }
    public String getResponseReceiveDate() {
        return ResponseReceiveDate;
    }
    public void setResponseReceiveDate(String ResponseReceiveDate) {
        this.ResponseReceiveDate = ResponseReceiveDate;
    }
    public String getMessage() {
        return Message;
    }
    public void setMessage(String Message) {
        this.Message = Message;
    }
}   

我查看了 ObjectMapper,但我不确定如何在我的控制器中使用它,而且说实话,如果 Spring 可以免费编写的话,我宁愿不必编写一堆额外的类。

【问题讨论】:

  • 字段可以带大写和小写吗?还是其中之一?
  • POST 中的键将大小写混合,例如:FromPhoneNumber、ToPhoneNumber、ResponseReceiveDate、Message
  • Sotirios Delimanolis 知道了,8 分钟响应时间!谢谢 StackOverflow!

标签: java json spring post jaxb


【解决方案1】:

只需使用 @JsonProperty 注释您的字段、getter 或 setter,指定将出现在 JSON 中的确切名称。例如

@JsonProperty("FromPhoneNumber")
private String FromPhoneNumber;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2013-03-12
    • 2010-11-15
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多