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

不区分大小写的JSON到POJO映射,而不更改POJO

傅献
2023-03-14

有人知道com.fasterxml.jackson.DataBind.ObjectMapper是如何将JSON属性映射到POJO属性的吗?

public class Person {

    private String firstName;
    private String lastName;
    private Date dateOfBirth;

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public Date getDateOfBirth() {
        return dateOfBirth;
    }
    public void setDateOfBirth(Date dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
    }
}
@Test
public final void testDeserializingPersonJsonToPersonClass()
        throws JsonParseException, JsonMappingException, IOException {
    final String jsonAsString = "[{\"FIRSTNAME\":\"John\",\"LASTNAME\":\"Doe\",\"DATEOFBIRTH\":\"1980-07-16T18:25:00.000Z\"}]";
    final ObjectMapper mapper = new ObjectMapper();

    final Person person = mapper.readValue(jsonAsString, Person.class);

    assertNotNull(person);
    assertThat(person.getFirstName(), equalTo("John"));
}

这将导致以下错误:
com.fasterxml.jackson.DataBind.JsonMappingException:无法反序列化...

既不能更改JSON-String也不能更改pojo-class。

共有1个答案

郁明诚
2023-03-14

Jackson 2.5.0中引入了这种行为。可以使用MapperFeature.Accept_Case_Insensitive_Properties将映射器配置为不区分大小写。

例如:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
 类似资料:
  • 根据这个答案,我尝试编写代码: pojo: 内部控制器: 网状物xml配置: 过滤器: 在debug中,我看到filter方法调用,但我无法实现case-insentive-get-parameters映射。 例如可以工作,但是-不

  • 我想将map转换为json,但使用jackson更改大小写。例如,我有这个地图: 我想将其转换为 json,但从下划线大小写更改为较低的驼峰大小写。我该怎么做?使用这个没有帮助:

  • 我和jackson一起绘制地图,我有点迷茫。我的Json具有以下结构 我确实找到了很多处理数组的教程,但我在第一个标记“d”时就已经失败了。而且根本不需要所有的“_元数据”标记。 我创建了一个包含lastName等属性和一个集合附件的pojo。但我的代码在标记“d”或“_元数据”时总是失败 还有杰克逊的读者 任何提示都将不胜感激。 问候马蒂亚斯

  • 问题内容: 我有一个Lucene索引,该索引当前区分大小写。我想添加的 选项 有不区分大小写作为后备的。这意味着与案例匹配的结果将获得更大的权重,并且将首先出现。例如,如果结果数限制为10,并且有10个匹配项符合我的情况,那就足够了。如果仅找到7个结果,则可以从不区分大小写的搜索中再添加3个结果。 我的案子实际上更复杂,因为我有不同重量的物品。理想情况下,匹配“错误”的表壳会增加一些重量。不用说,

  • 问题内容: 我想按不区分名称的名称搜索用户表中的数据。 我收到一个错误: 意外令牌:% 。我应该在哪里放置“%”? 问题答案: 您可以使用concat运算符: 或使用命名参数: (使用Spring Boot 1.4.3测试)