Spring @RequestBody Override

I have a Spring controller that processes messages and it works. The only problem is that our SMS providers will send us headers containing keys with a capital first letter, for example:

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

Spring will throw an error, for example:

    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"])

So there must be a way to override this behavior. Here is a controller method that processes CDyne messages:

    @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);
        }       

    }

and here is the CDynePost class:

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;
    }
}   

I looked at ObjectMapper, but I'm not sure how to work with this in my controller, and to be honest, I would rather not write a bunch of extra classes if Spring does it for free.

+4
source share
1 answer

, @JsonProperty, , JSON.

@JsonProperty("FromPhoneNumber")
private String FromPhoneNumber;
+3

All Articles