【问题标题】:Parsing JSON by jackson杰克逊解析 JSON
【发布时间】:2015-06-22 06:26:17
【问题描述】:

我有一个表单,其中包含在 JSON 中的参数由 Jackson 解析。如果参数类型是'int'并且用户输入一个大数字,我有一个例外。我限制在客户端这样做,但想知道,处理此类异常的最佳做法是什么?我应该打扰吗?还是没关系?

【问题讨论】:

  • 只要输入仅来自客户端,在客户端进行验证应该没问题。如果输入也可以来自其他来源,建议检查解析方法。 Jackson 不支持 BigInteger 吗?

标签: java json hibernate jackson


【解决方案1】:

始终包含服务器端验证

由于可以通过手动向端点发送请求(例如在 PostMan 中或使用 DevTools)轻松避免客户端验证,因此鼓励在客户端和服务器端进行验证是正确的。特别是如果你想公开开放一个 API,服务器端验证是必不可少的。您不能信任与您的 API 交互的每个客户端。这里有几个提示:

返回422 Unprocessable Entity的响应状态

假设您使用 HTTP 进行通信,返回的相应响应代码是 422。422 表示验证错误,并且有质量解释 here。为不同的错误场景返回描述性状态代码更符合 RESTful/HTTP 标准。在此示例中,您通过返回 422 与 500 相比为您的客户提供更多信息。您可以通过返回描述无效字段的错误响应来更进一步。

使用 JAX-RS 将异常映射到响应

JAX-RS 是一种规范,可以轻松地在 Java 中构建 RESTful Web 服务。如果您的应用程序中已经连接了 JAX-RS 实现,您可以定义一个 exception mapper 来查找 JsonMappingException,检查 NumberFormatException 的原因(如果您使用的是装箱的 Integer)并返回遇到这种情况时作出适当的反应。

【讨论】:

  • 我会投票给代码 400 (developer.mozilla.org/en-US/docs/Web/HTTP/Status/400)。代码 422 表示“服务器理解请求实体的内容类型,请求实体的语法正确,但无法处理包含的指令”。 (developer.mozilla.org/en-US/docs/Web/HTTP/Status/422)。语法与预期不符,因此服务器无法处理请求。除此之外,我完全同意你的帖子:)
  • @AaronDietz 自从写了这篇文章以来,我学到了很多东西并且改变了我的观点。 7年的技术就像1000年!哈哈。在实践中,我现在也会使用 400。总的来说,我尽量让我的 API 更简单,我已经不再试图成为硬核的“REST”,此时我真的很兴奋。我喜欢简单,我同意,我认为 400 可以很好地解决这个问题。
猜你喜欢
  • 2019-07-27
  • 2019-11-25
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2013-12-29
  • 2022-07-21
  • 2014-06-17
  • 1970-01-01
相关资源
最近更新 更多