我试图将使用ajax的json发布到我的spring mvc控制器中,我在js文件中使用如下代码:

$('#regist').click(function () {
                $.ajax({
                    url: 'user/regist',
                    contentType: "application/json; charset=utf-8",
                    type: 'post',
                    dataType: 'json',
                    success: function (data) {
                        var json = JSON.stringify(data);
                        alert(json);
                    },
                    fail: function (errMsg) {
                        alert(errMsg);
                    },
                    data: JSON.stringify({
                        'IDCard': '1234567890'
                    })
                })
            });


我的控制器功能的签名是这样的:

@RequestMapping(value = "/regist", method = RequestMethod.POST)
@ResponseBody
public ResultJson regist(HttpSession session, @RequestBody RegistFormJson json)


RegistFormJson如下所示:

public class RegistFormJson  {
    private String IDCard;

    public String getIDCard() {
        return IDCard;
    }

    public void setiDCard(String IDCard) {
        this.IDCard = IDCard;
    }
}


现在,当我发送请求时,以及使用

logger.info(json.getIDCard);


为null。当我将bean属性更改为idCard并同时更改其他代码时,也可以成功获得结果。谁能告诉我为什么?而且,如果我想在代码中使用IDCard,如何获得结果。谢谢

最佳答案

Spring附带了Jackson API,该API使用标准Java代码约定将JSON属性映射到Java模型。

由于IDCard不是小写字母,因此Jackson API无法映射JSON属性。

为了克服这个问题,您需要在Java属性上指定@JsonProperty("IDCard")批注,以便将IDCard用于JSON属性。

同样,您可以在PropertyNamingStrategy上设置ObjectMapper以解决此问题。

10-08 12:18