我有一个表格,其中Jackson解析了JSON中打包的参数。如果参数类型为'int'并且用户输入了一个大数字,则我有一个例外。我限制在客户端执行此操作,但想知道,处理此类异常的最佳实践是什么?我应该打扰吗?还是没关系?
最佳答案
一律包含伺服器端验证
由于可以通过手动将请求发送到端点(例如在PostMan或使用DevTools)轻松避免客户端验证,因此您应该鼓励在客户端和服务器端进行验证。尤其是如果您要公开开放API,则服务器端验证至关重要。您不能信任与API交互的每个客户端。这里有一些提示:
返回响应状态为422 Unprocessable Entity
假设您使用HTTP进行通信,则返回的适当响应代码为422。422表示验证错误,并且有质量说明here。返回RESTful / HTTP更符合RESTful / HTTP,以针对不同的错误情况返回描述性状态代码。在此示例中,通过返回422(而不是500)为您的客户提供了更多信息。通过返回描述无效字段的错误响应,您甚至可以走得更远。
使用JAX-RS将异常映射到响应
JAX-RS是一个规范,可以轻松地用Java构建RESTful Web服务。如果您的应用程序中已经连接了JAX-RS实现,则可以定义exception mapper来查找JsonMappingException
,检查NumberFormatException
的原因(如果使用的是装箱的Integer
)并返回遇到这种情况时采取适当的应对措施。