开发者社区 问答 正文

@JsonProperty不会覆盖布尔值并且仍在删除`is`

很抱歉,重复的内容不适用/对我不起作用。示例:杰克逊未使用@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;
   }
}

谢谢!

展开
收起
垚tutu 2019-12-12 09:35:11 670 分享 版权
阿里云 AI 助理回答

从你的描述来看,问题似乎出在序列化ValidationDTO对象到JSON时,期望的字段名(isZipValidand, isApplianceTypeValid)并没有如愿出现,而是被默认的getter方法名称影响,变成了zipValidapplianceTypeValid。你已经尝试使用了@JsonProperty注解来修正字段名,但看起来效果并未如预期。

首先,确认几个点:

  1. 确保Jackson库的版本兼容且正确配置:确保你的项目中使用的Jackson库版本支持@JsonProperty注解,并且在项目的配置中已经启用了该特性。通常情况下,Spring Boot等框架会自动处理这些配置,但如果是在更基础的Java项目中,可能需要手动配置ObjectMapper。

  2. 检查序列化过程:你提到的代码片段jsonResponse.put("statusResponse", new JSONObject(responseStatus));似乎没有直接展示如何将ValidationDTO实例转换为JSON。这里的关键在于理解responseStatus变量是如何创建和填充的。如果responseStatus是直接从ValidationDTO实例转化而来,那么请确保在进行序列化操作时,Jackson的ObjectMapper能够正确识别并应用@JsonProperty注解。

  3. 直接使用ObjectMapper进行序列化:一个推荐的做法是直接使用Jackson的ObjectMapper来序列化对象,而不是手动构建JSONObject。这样可以更好地控制序列化行为,确保注解被正确处理。示例代码如下:

import com.fasterxml.jackson.databind.ObjectMapper;

// ...

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(validationDto);
  1. 注解位置:你已经在getter方法上使用了@JsonProperty,这是正确的做法。但是,请注意getter和setter的一致性,尽管这不直接影响你的问题,但保持良好的编码习惯总是好的。

  2. 调试与日志:如果问题依旧,可以通过开启Jackson的详细日志来查看其内部是如何处理注解和序列化的,这有助于定位问题所在。

如果以上步骤都确认无误,而问题仍然存在,可能需要进一步检查是否有其他代码逻辑覆盖或忽略了你的注解设置,或者考虑是否存在类路径冲突等问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: