很抱歉,重复的内容不适用/对我不起作用。示例:杰克逊未使用@JsonProperty覆盖Getter
下面是我的对象,它仍然会返回zipValid,applianceTypeValid但是我正在寻找isZipValidand isApplianceTypeValid。
在调试过程中,我注意到此行jsonResponse.put("statusResponse", new JSONObject(responseStatus));是将其更改为zipValid和的地方applianceTypeValid。responseStatus具有预期的正确值,但此刻responseStatus已加载到中jsonResponse,消失了。不知道这有帮助。
package com.dish.wfm.services.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
public class ValidationDTO {
private boolean isZipValid;
private boolean isApplianceTypeValid;
private List<String> partnerEnabledProductTypes;
@JsonProperty(value="isZipValid")
public boolean isZipValid() {
return isZipValid;
}
public void setZipValid(boolean zipValid) {
isZipValid = zipValid;
}
@JsonProperty(value="isApplianceTypeValid")
public boolean isApplianceTypeValid() {
return isApplianceTypeValid;
}
public void setApplianceTypeValid(boolean applianceTypeValid) {
isApplianceTypeValid = applianceTypeValid;
}
public List<String> getPartnerEnabledProductTypes() {
return partnerEnabledProductTypes;
}
public void setPartnerEnabledProductTypes(List<String> partnerEnabledProductTypes) {
this.partnerEnabledProductTypes = partnerEnabledProductTypes;
}
}
谢谢!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你的描述来看,问题似乎出在序列化ValidationDTO
对象到JSON时,期望的字段名(isZipValidand
, isApplianceTypeValid
)并没有如愿出现,而是被默认的getter方法名称影响,变成了zipValid
和applianceTypeValid
。你已经尝试使用了@JsonProperty
注解来修正字段名,但看起来效果并未如预期。
首先,确认几个点:
确保Jackson库的版本兼容且正确配置:确保你的项目中使用的Jackson库版本支持@JsonProperty注解,并且在项目的配置中已经启用了该特性。通常情况下,Spring Boot等框架会自动处理这些配置,但如果是在更基础的Java项目中,可能需要手动配置ObjectMapper。
检查序列化过程:你提到的代码片段jsonResponse.put("statusResponse", new JSONObject(responseStatus));
似乎没有直接展示如何将ValidationDTO
实例转换为JSON。这里的关键在于理解responseStatus
变量是如何创建和填充的。如果responseStatus
是直接从ValidationDTO
实例转化而来,那么请确保在进行序列化操作时,Jackson的ObjectMapper
能够正确识别并应用@JsonProperty
注解。
直接使用ObjectMapper进行序列化:一个推荐的做法是直接使用Jackson的ObjectMapper
来序列化对象,而不是手动构建JSONObject。这样可以更好地控制序列化行为,确保注解被正确处理。示例代码如下:
import com.fasterxml.jackson.databind.ObjectMapper;
// ...
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(validationDto);
注解位置:你已经在getter方法上使用了@JsonProperty
,这是正确的做法。但是,请注意getter和setter的一致性,尽管这不直接影响你的问题,但保持良好的编码习惯总是好的。
调试与日志:如果问题依旧,可以通过开启Jackson的详细日志来查看其内部是如何处理注解和序列化的,这有助于定位问题所在。
如果以上步骤都确认无误,而问题仍然存在,可能需要进一步检查是否有其他代码逻辑覆盖或忽略了你的注解设置,或者考虑是否存在类路径冲突等问题。