【问题标题】:Spring RestController : reject request with unknown fieldsSpring RestController:拒绝带有未知字段的请求
【发布时间】:2015-06-13 18:39:18
【问题描述】:

我有以下端点:

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.bind.annotation.RequestMethod.POST;

@RestController
public class TestController {

    @RequestMapping(value = "/persons", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
    public ResponseEntity<Integer> create(@RequestBody Person person) {
        // create person and return id
    }
}

今天如果我收到这样一个未知字段的请求:

{
    "name" : "Pete",
    "bijsdf" : 51
}

我创建人并忽略未知字段。

如何检查是否存在未知字段,然后返回错误请求?

【问题讨论】:

  • 您使用的是什么 JSON 库?我认为这是杰克逊的默认设置
  • 嗨 Neil,是的,我使用的是 jackson 2.5.0
  • 是的,Jackson 会处理这个问题。你的Person 类是否用@JsonIgnoreProperties(ignoreUnknown = true) 注释?
  • 我的 Person 类上没有注释
  • 检查一下:fasterxml.github.io/jackson-annotations/javadoc/2.5/com/…ignoreUnknown 的默认值为false。这意味着 Jackson(我正在查看 2.5.0 文档)默认情况下会为缺少的字段抛出异常。

标签: java validation rest spring-mvc jackson


【解决方案1】:

Spring (4.1.2-RELEASE) 使用 Jackson2ObjectMapperBuilder,默认情况下禁用 FAIL_ON_UNKNOWN_PROPERTIES 过载杰克逊默认行为。 看到这个link来配置spring。 谢谢大家的帮助

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    相关资源
    最近更新 更多