在找不到请求的资源时,是否可以在服务器端抛出异常?
客户端收到404未找到。我关心的是,当发生这种情况时,是否在服务器端抛出异常是好还是错。
答案 0 :(得分:2)
很难假设您尝试使用添加到问题中的详细信息。
但是,如果您正确处理异常,则该方法可能没有任何问题。看看一些框架使用的方法:
您可以抛出一个WebApplicationException
,它将映射一个响应。您可以定义自己的WebApplicationException
子类或使用现有的子类。例如,NotFoundException
将映射到具有.idea
状态代码的响应。有关现有例外的更多详细信息,请参阅此answer。
您还可以创建自己的ExceptionMapper
,将任何异常映射到所需的响应。
您可以通过使用@ResponseStatus
注释异常类来将异常映射到响应。
它还为您提供了实现HandlerExceptionResolver
或扩展其中一个现有实现的可能性,例如AbstractHandlerExceptionResolver
。
另一种方法是使用带有ResponseEntityExceptionHandler
注释的@ControllerAdvice
,并通过使用@ExceptionHandler
答案 1 :(得分:1)
基本上抛出异常的保留状态代码并不理想。你应该在内部处理这些异常并准备你自己的代码,其中包含客户应该知道实际问题的完整信息。
答案 2 :(得分:1)
从语义的角度来看:如果条件不可恢复且必须通知devs,则应抛出异常。
服务器无法在会话开始时解析身份验证请求 - 这是非常严重的情况,并且异常是适当的。
用户未填写必填字段并尝试发送表单。这个问题可以修复,异常是一个糟糕的设计。
答案 3 :(得分:0)
我想说添加一个过滤器来捕获404并添加有关404详细信息的自定义信息。
如果是纯REST实现,任何缺少资源ID和格式错误的URL都将返回404。 就REST合同而言,两种情况都有正确的404响应。但是关于缺少什么类型的资源的更多细节将帮助客户端消费它以采取适当的行动。