Jun*_*3ta 5 json type-conversion pojo jackson spring-boot
我正在使用Spring Boot和Spring Framework(spring-boot-starter-parent 2.1.6.RELEASE)开发Rest Client,我有一个表示响应对象的类,如下所示:
public class ValidateResponse {
    private String ResponseCode;
    private String ResponseDesc;
    //getters and setters
    //constructors using fields
    //empty constructor
}
我正在为外部api创建网络挂钩,并且需要为特定端点返回JSON对象(JSON对象属性必须以大写字母开头)。我正在调用从PostMapping嵌套在RequestMapping根路径中的方法返回对象:
@PostMapping("hooks/validate")
public ValidateResponse responseObj(@RequestHeader Map<String, String> headersObj) {
    ValidateResponse response = new ValidateResponse("000000", "Success");
    logger.info("Endpoint = hooks/validate | Request Headers = {}", headersObj);
    return response;
} 
但是,当我从邮递员到达终点时,我得到了重复的varialbes
{
    "ResponseCode": "000000",
    "ResponseDesc": "Success",
    "responseCode": "000000",
    "responseDesc": "Success"
}
我知道pojo-json转换是由spring处理的,但是我不明白为什么转换会产生重复的变量。
注意:我知道使用最佳命名变量标准(camelCasing)不会声明ResponseDesc和ResponseCode。
我已经按照Java语言规范进行了一些挖掘
标识符是Java字母和Java数字的无限长度序列,其中第一个必须是Java字母。
和
“ Java字母”包括大写和小写的ASCII拉丁字母AZ(\ u0041- \ u005a)和az(\ u0061- \ u007a),并且由于历史原因,ASCII下划线(_或\ u005f)和美元符号($或\ u0024)。$字符仅应在机械生成的源代码中使用,或很少用于访问旧系统上的现有名称。
因此,我假设它在语法上正确地使用Camelcase[需要对此澄清]格式定义变量。
我正在考虑必须手动创建JSON对象,但我想首先了解此行为的原因。任何指针表示赞赏。
public class ValidateResponse {
    @JsonProperty("ResponseDesc")
    public String responseCode;
    @JsonProperty("ResponseDesc")
    public String responseDesc;
    //getters and setters
    //constructors using fields
    //empty constructor
}
这必须解决您的问题,但我不知道原因,因为它需要深入杰克逊调查。
编辑
我找到了原因。该字段被重复,因为在您的情况下您有:
getResponseCode和getResponseDesc-> 它们将被解析为属性的访问器responseCode并responseDesc相应地。总结一下 - Jackson 解决了您的 4 个属性。只需将您的字段设为私有即可解决您的问题,但我仍然建议使用JsonProperty方法。