Spring @RequestBody 重载

5

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

 {
"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能够免费完成此任务,我宁愿不写大量额外的类。


这些字段可以同时包含大写字母和小写字母吗?还是只能包含其中一个? - Sotirios Delimanolis
POST中的键是混合大小写的,例如:FromPhoneNumber、ToPhoneNumber、ResponseReceiveDate、Message。 - Jonas Schreiber
Sotirios Delimanolis明白了,8分钟响应时间!谢谢StackOverflow! - Jonas Schreiber
1个回答

6

只需在您的字段、getter或setter上注释@JsonProperty,并指定在JSON中显示的确切名称即可。例如:

@JsonProperty("FromPhoneNumber")
private String FromPhoneNumber;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接