无名阁,只为技术而生。流水不争先,争的是滔滔不绝。

前后端传参的not marked as ignorable问题 – 解决JSON解析库中的“not marked as ignorable”问题:忽略未知属性 全网首发(图文详解1)

前沿技术 Micheal 6个月前 (06-27) 130次浏览 已收录 扫描二维码

前后端传参的not marked as ignorable问题 –

在前后端交互过程中,”not marked as ignorable”问题通常指的是在使用如Jackson这样的JSON解析库时,JSON中存在一些未在Java对象中定义的字段,导致解析时抛出异常。这个问题是因为JSON解析库默认行为是所有接收到的字段都必须在Java对象中有对应的属性。如果接受的JSON字段在Java对象中找不到相应的属性,就会抛出UnrecognizedPropertyException异常。

以下是解决此问题的几种方法:

1. 忽略未知属性

在Java对象类上使用@JsonIgnoreProperties注解,忽略不需要的属性。这是最简单的方法。

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyObject {
    // 类属性
}

2. 使用Map接收所有字段

如果你想要接收所有传入的Json字段,并且不想为每一个都创建类属性,你可以考虑将接收对象设置为Map。

import com.fasterxml.jackson.databind.ObjectMapper;

// 示例JSON字符串
String jsonStr = "{\"name\":\"Tom\", \"age\":25}";
ObjectMapper mapper = new ObjectMapper();

Map<String, Object> map = mapper.readValue(jsonStr, new TypeReference<Map<String, Object>>() {});
System.out.println(map);

3. 配置ObjectMapper

如果你使用ObjectMapper实例进行解析,可以配置它忽略未知属性。

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

通过这种方式,你可以全局性地忽略未知字段,而不是在每个类上分别配置。

4. 使用@JsonAnySetter注解

通过将@JsonAnySetter注解用在一个方法上,你可以捕捉所有未在Java对象中定义的字段。

import com.fasterxml.jackson.annotation.JsonAnySetter;

public class MyObject {

    private Map<String, Object> details = new HashMap<>();

    @JsonAnySetter
    public void setDetail(String key, Object value) {
        details.put(key, value);
    }

    // Getter和其他属性...
}

通过上述方法,你可以灵活地处理前后端传参的”not marked as ignorable”问题。选择适合你项目需求的方法进行应用。在不同的场景中,可能需要采取不同的策略来处理未知属性,重点在于确保数据的正确解析和使用。
(neo4j bloom) Neo4j Bloom试用体验 – Neo4j Bloom:探索和可视化图形数据库数据 全网首发(图文详解1)
(ffmpeg 切片) ffmpeg视频切片方案 – FFmpeg 视频切片方案概述 全网首发(图文详解1)

喜欢 (0)
[]
分享 (0)
关于作者:
流水不争先,争的是滔滔不绝