杰克逊默认错误地忽略了未知领域

时间:2017-11-17 16:50:51

标签: java spring-boot jackson

我有一个非常简单的REST API项目,使用Spring Boot 1.5.7和Jackson 2.8。

问题

如果请求中存在未知字段,我希望杰克逊抱怨并提出异常。虽然我没有设置任何告诉它忽略它们的东西,但它只是忽略它而我不知道为什么。

请求:

{
  "appId":1,
  "version":"1.0",
  "status":true,
  "locked":false,
  "field": "it is ignored, but it must not be"
}

Requet方法

@PutMapping
public ResponseEntity<?> updateAppToggle(@RequestBody AppToggleUpdateRequest request) {
   AppToggle updatedAppToggle = service.update(request);
   return new ResponseEntity<AppToggleResponse>
       (AppToggleResponse.fillResponse(updatedAppToggle), HttpStatus.OK);
   }

请求类

@Data
public class AppToggleUpdateRequest {

   @NotNull
   @Getter
   private Long appId;

   @NotNull
   @Getter
   private String version;

   private Boolean status;

   private Boolean locked;
}

我的application.properties不包含任何特殊内容,只包含数据源和H2内存数据库的一些内容。

我真的不知道发生了什么。任何帮助都会得到真正的赞赏。

2 个答案:

答案 0 :(得分:1)

我修复了我的应用程序,将以下内容添加到application.properties文件中:

spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=true

答案 1 :(得分:0)

你试过这个:

@JsonIgnoreProperties(ignoreUnknown = true) 
@Data
public class AppToggleUpdateRequest { .. }