当前位置: 首页 > 知识库问答 >
问题:

带有空字符串的Jackson com.fasterxml.Jackson.DataBind.Exc.MisMatchedInputException

司凡
2023-03-14

具有以下json片段:

"Location": {
    "Address": ""
},
public class Address implements Serializable
{

    @JsonProperty("City")
    private String city;
    @JsonProperty("StateProvinceCode")
    private String stateProvinceCode;
    @JsonProperty("PostalCode")
    private String postalCode;
    @JsonProperty("CountryCode")
    private String countryCode;
    private final static long serialVersionUID = -4475717488164417476L;

    /**
     * No args constructor for use in serialization
     * 
     */
    public Address() {
    }

    /**
     * 
     * @param city
     * @param countryCode
     * @param postalCode
     * @param stateProvinceCode
     */
    public Address(String city, String stateProvinceCode, String postalCode, String countryCode) {
        super();
        this.city = city;
        this.stateProvinceCode = stateProvinceCode;
        this.postalCode = postalCode;
        this.countryCode = countryCode;
    }

getters and settes ...

这是我的对象映射器配置

@Bean
  public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new Jdk8Module());
    mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    return mapper;
  }

附加注意:Pojo类是使用jsonschema2pojo gradle插件生成的,并且基于json模式

共有1个答案

袁亦
2023-03-14

正如@Dmitry Zagorulkin所建议的,将deserializationfeature.accept_empty_string_as_null_object改为true。更多详细信息,请查看文档。

下面是我试图复制该问题的代码,并通过添加注释突出显示的行来修复该问题。

public class JacksonExample2 {

    private static String json1 = "{\r\n" + 
         "  \"Location\": {\r\n" + 
         "    \"Address\": \"\"\r\n" + 
         "  }\r\n" + 
         "}";


    public static void main(String[] args) throws JSONException, IOException {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new Jdk8Module());
        mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
        // Add this line
        mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
        ParentData parentData = mapper.readValue(json1, ParentData.class);
        Address address = new Address("New York", null, null, null);
        LocationData locationData = new LocationData(address);
        System.out.println(parentData);
    }

}

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
class ParentData {
    @JsonProperty("Location")
    private LocationData locationData;
}

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
class LocationData {
    @JsonProperty("Address")
    private Address address;
}

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
class Address implements Serializable {

    @JsonProperty("City")
    private String city;
    @JsonProperty("StateProvinceCode")
    private String stateProvinceCode;
    @JsonProperty("PostalCode")
    private String postalCode;
    @JsonProperty("CountryCode")
    private String countryCode;
    private final static long serialVersionUID = -4475717488164417476L;
}
 类似资料:
  • 我正在尝试从Java文本文件中读取一行。我得到一个异常。 这是文本文件中的行: 我需要用“#”拆分,这部分起作用了。当我试图访问位置1处的元素时,Java抛出异常。我想这是因为名字和姓氏之间有空格,因为当我显示的是“Chiquita”,而不是“Chiquita Sanford”。 当第一个数组索引中有多个单词时,Java对拆分是否有一些限制。

  • 我需要构造正则表达式来验证文本,它可以包含空格和连字符,除了连字符之外没有数字和特殊字符。文本应以字母开头。没有以空格和连字符开头和结尾。单词之间应允许使用单个空格。 ASDF-A ADF-AAD A-A-A A DDD-A 示例 AD-AA-A ADF-ad-DD-A AAA

  • 问题内容: 我试图理解字符串比较与字符串比较的输出。需要明确的是,我拥有使用==和equals比较两个字符串的类。我试图将==和equals()的输出合并为字符串。equals()的输出会连续显示,但==的输出不会 连续显示。使用Java的装箱功能,将与字符串连接的布尔值联系起来。equals和==都返回布尔值。那么为什么会有这种差异呢?有人可以解释吗? 输出 更新:答案 如果不使用s1 == s

  • 问题内容: 我有一个字典,想删除所有有空值字符串的键。 做这个的最好方式是什么? 问题答案: Python 2.X Python 2.7-3.X 请注意,您所有的键都有值。只是其中一些值是空字符串。没有值的字典中就没有键。如果它没有价值,就不会在字典中。

  • 问题内容: 我有这个: JSONLint表示这是完全有效的json。但是执行时出现错误。 但是,如果我将代码更改为: (请注意双反斜杠) 它可以工作,但是现在JSONLint表示。 有人可以帮助您了解这种行为吗? 问题答案: 有线格式和您必须在代码中编写的格式之间是有区别的。当您在代码中声明此代码时,您需要在文字中使用双-\,以便字符串获得一个反斜杠(否则,它将\\解释为一个转义序列,仅声明一个“

  • 问题内容: 我正在从事Java代码优化。我不清楚或符号之间的区别: 第2行和第3行有什么区别? 问题答案: 这种方法使用StringBuilder创建结果字符串 此方法仅调用的静态方法来获取int的String版本 依次调用