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
}
Run Code Online (Sandbox Code Playgroud)
我正在为外部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;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我从邮递员到达终点时,我得到了重复的varialbes
{
"ResponseCode": "000000",
"ResponseDesc": "Success",
"responseCode": "000000",
"responseDesc": "Success"
}
Run Code Online (Sandbox Code Playgroud)
我知道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
}
Run Code Online (Sandbox Code Playgroud)
这必须解决您的问题,但我不知道原因,因为它需要深入杰克逊调查。
编辑
我找到了原因。该字段被重复,因为在您的情况下您有:
getResponseCode和getResponseDesc-> 它们将被解析为属性的访问器responseCode并responseDesc相应地。总结一下 - Jackson 解决了您的 4 个属性。只需将您的字段设为私有即可解决您的问题,但我仍然建议使用JsonProperty方法。
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |