【问题标题】:Jackson wrongly ignoring unknown fields by default杰克逊默认错误地忽略未知字段
【发布时间】:2018-05-01 12:32:53
【问题描述】:

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

问题

如果请求中有未知字段,我希望 Jackson 投诉并提出异常。虽然我没有设置任何东西告诉它忽略它们,但它只是忽略它,我不知道为什么。

请求:

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

请求方法

@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 内存数据库的一些内容。

我真的不知道发生了什么。任何帮助将不胜感激。

【问题讨论】:

  • 基本上,这很奇怪,因为规范明确指出FAIL_ON_UNKNOWN_PROPERTIES 默认情况下处于启用状态。您确定这些都不是:howtoprogram.xyz/2017/02/18/… 适用于您的代码吗?
  • 正如我所说,我的应用程序非常简单(用于学习目的),而且我使用的所有东西都是开箱即用的。我可以尝试像this 这样的解决方案,但它没有任何意义,正如你所说,我期望的行为是默认设置的,尽管它似乎不在我的应用程序中。

标签: java spring-boot jackson


【解决方案1】:

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

spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=true

【讨论】:

【解决方案2】:

你试过了吗:

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

【讨论】:

  • 我试图将其设置为“false”,因为我希望我的应用程序只接受已知字段,但也无济于事。
猜你喜欢
  • 2016-06-06
  • 2015-05-23
  • 2015-03-20
  • 2016-04-19
  • 2016-01-16
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
相关资源
最近更新 更多