Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "paramFileGuid" (class edu.nwpu.domain.ModelFileParam), not marked as ignorable (10 known properties: "value", "paramFileName", "paramGuid", "paramName", "guid", "id", "nodeId", "unit", "version", "name"]) at [Source: (String)"[{"paramFileGuid":"6e8d9455ad5d4ab28e3423d95d1c96cc","paramFileName":"processing-waixuanyizhou.STEP","paramGuid":"","paramName":"","value":"","unit":""}]"; line: 1, column: 20] (through reference chain: java.util.ArrayList[0]->edu.nwpu.domain.ModelFileParam["paramFileGuid"])
时间: 2025-06-12 22:47:52 浏览: 21
### 解决UnrecognizedPropertyException异常的方法
在处理JSON反序列化时,如果目标类中不存在某些字段,而这些字段出现在JSON字符串中,Jackson库会抛出`UnrecognizedPropertyException`异常。为了防止此类异常发生,可以通过以下两种方法解决:
#### 方法一:配置ObjectMapper以忽略未知属性
通过设置`ObjectMapper`的`DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES`选项为`false`,可以确保在反序列化过程中忽略未知字段。例如,以下是具体的代码实现[^1]:
```java
@Test
public void givenJsonStringWithExtra_whenConfigureDeserializing_thenCorrect() throws IOException {
String json = "{\"id\":1,\"name\":\"John\", \"checked\":true}";
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); // 关键配置
User user = mapper.reader().forType(User.class).readValue(json);
assertEquals("John", user.name);
}
```
在此示例中,`mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)`明确告诉Jackson在遇到未映射的字段时不要抛出异常。
#### 方法二:使用`@JsonIgnoreProperties`注解
另一种方法是直接在目标类上添加`@JsonIgnoreProperties(ignoreUnknown = true)`注解。这种方式更为简洁,适用于特定类的反序列化场景。以下是示例代码[^1]:
```java
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
public int id;
public String name;
@Override
public String toString() {
return "User{id=" + id + ", name='" + name + "'}";
}
}
```
此注解的作用是让Jackson自动忽略JSON中所有未定义的字段,从而避免抛出`UnrecognizedPropertyException`。
#### 针对`paramFileGuid`字段的具体解决方案
假设`paramFileGuid`是一个未在目标类`ModelFileParam`中定义的字段,并且希望忽略它以避免异常,可以结合上述两种方法之一进行处理。例如:
- 如果选择修改`ObjectMapper`配置,可以在反序列化之前禁用`FAIL_ON_UNKNOWN_PROPERTIES`。
- 如果选择注解方式,可以在`ModelFileParam`类上添加`@JsonIgnoreProperties(ignoreUnknown = true)`。
以下是基于`ModelFileParam`类的一个完整示例:
```java
@JsonIgnoreProperties(ignoreUnknown = true) // 忽略未知字段
public class ModelFileParam {
private String fileName;
private String fileType;
// Getters and Setters
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
@Override
public String toString() {
return "ModelFileParam{fileName='" + fileName + "', fileType='" + fileType + "'}";
}
}
```
然后,在反序列化时,即使JSON中包含`paramFileGuid`字段,也不会引发异常。
---
### 日志框架的选择与日志格式
在实际开发中,除了处理反序列化异常外,还需要注意日志记录。Java中有许多日志框架可供选择,但通常情况下,Spring Boot默认的日志依赖已经足够满足需求[^2]。如果需要自定义日志格式,可以参考Spring Boot官方文档中的相关内容[^2]。
---
### 注意事项
无论选择哪种方法,都需要确保团队成员了解所采用的解决方案,并在必要时更新相关文档。此外,建议在单元测试中验证反序列化的正确性,以减少潜在问题。
---
阅读全文
相关推荐


















