如果 json 包含未知字段,我需要 GSON 映射器抛出异常。例如,如果我们有像 POJO
public class MyClass {
String name;
}
和json一样
{
"name": "John",
"age": 30
}
我想得到某种消息,json 包含无法反序列化的未知字段(年龄)。
我知道 Jackson 映射器中有开箱即用的解决方案,但在我们的项目中,我们多年来一直使用 Gson 作为映射器,使用 Jackson 最终会在项目的不同部分出现冲突和错误,所以它是对我来说,编写自己的解决方案比使用 Jackson 更容易。
换句话说,我想知道 Gson 中是否存在与 Jackson 的 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
等价的东西。或者如果可以使用 Gson 的 DeserializationStrategy 而不是使用反射来完成
最佳答案
我相信你不能用 Gson 自动完成。
我必须在工作项目中这样做。我做了以下事情:
Gson GSON = new GsonBuilder().create();
(static final) Map<String, Field> FIELDS = Arrays.stream(MyClass.class.getDeclaredFields())
.collect(Collectors.toMap(Field::getName, Function.identity()));
JsonObject object = (JsonObject) GSON.fromJson(json, JsonObject.class);
List<String> objectProperties = object.entrySet().stream().map(Entry::getKey).collect(Collectors.toList());
List<String> classFieldNames = new ArrayList<>(FIELDS.keySet());
if (!classFieldNames.containsAll(objectProperties)) {
List<String> invalidProperties = new ArrayList<>(objectProperties);
invalidProperties.removeAll(classFieldNames);
throw new RuntimeException("Invalid fields: " + invalidProperties);
}
关于java - 如何使 GSON 在未知属性上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65202860/