spring MVC json 无法正确绑定参数。

在项目中会传输json作为参数,在Controller中会接受该参数,
在Model里面声明相关的field以进行绑定,但是在使用过程中,发现有一个值未能成功绑定,实际获取为null的值。究其原因发现在json中该名称为sName,Model中也设置为sName,此时未能正常获取,当把sName改为ssName或者全小写时(Model也做相应修改)能够正常获取参数,或者使用JsonProperty的注解进行说明也可以。但是不知道造成这个问题的原因是什么?

阅读 2.8k
1 个回答

不确定jackson的版本,但是应该是一个命名转换的问题,可能是getSName这样的方法导致jackson取不到字段
如果可能,尽量避免第二个字母大写,因为不同框架和工具对这种情况的处理方式可能存在差异(首字母大写就更不用说了…参考这里

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;

public class Sf1010000022754889 {

    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        String json = "{\"aTest\":  \"hello!\"}";

        Test t = mapper.readValue(json, Test.class);
        System.out.println(t);
    }

    // 这里 lombok 生成的方法是 getATest,其实并不符合一般规范
    // 进而导致了 jackson 找不到字段
    @Data
    public static class Test {

        private String aTest;

        // 按照规范,其实应该是这样的
        // 以及,只要存在一个这样的 get/set 方法,jackson 就可以正确识别
        public void setaTest(String aTest) {
            this.aTest = aTest;
        }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题