在 REST
服务中将响应返回给客户端的所有可能性中,我已经看到了两种看似等效的可能性:抛出一个WebApplicationException
(可能使用一个Response
实例)或返回一个Response
实例。
由于结果相同,为什么要使用一种可能性而不是另一种?这是否与所使用的 REST 框架有关,可以将其配置为在异常和常规响应之间做出不同的反应?
由于结果相同,为什么要使用一种可能性而不是另一种?
也许因为作为(Java)程序员,您习惯于在应用程序的特定规则被破坏时引发异常?将一些字符串转换为数字,您可能会得到一个NumberFormatException
,在数组中使用错误的索引,然后得到一个ArrayIndexOutOfBoundsException
,访问某些您不允许访问的内容并获得一个SecurityException
etc。您习惯于在“常规响应”可以时抛出异常。无法创建(由于错误的输入或某些处理错误)。
当您无法返回常规响应时,必须向客户端返回错误响应。您可以通过抛出异常或手动构建响应来实现。对于您的客户端来说,这是一回事,但对于服务器端代码而言,则是一回事。
引发异常可使您的代码更整洁,更易于推理,从而更易于理解
。这个想法是将其子类化,WebApplicationException
并从中创建自己有意义的异常(例如ProductNotFoundException extends WebApplicationException { ... }
,AccessDeniedException extends WebApplicationException { ... }
或者使用异常映射器重用异常)。
这样,它对于throw new ProductNotFoundException()
或throw new AccessDeniedException()
让框架更干净,而不是Response
每次都构建它,然后再遵循构建它的细节来弄清楚该代码部分中正在发生的事情。
前面提到的 HTTP 响应,都是编程构建的。可以使用相同的机制来返回 HTTP 错误,例如在 try-catch 块处理异常。然而,更好地与 Java 编程模型一致,JAX-RS 允许定义 Java 异常 到 HTTP 错误响应的直接映射。 下面的示例演示了当 资源的方法返回一个错误的 HTTP 响应给客户端时,抛出 CustomNotFoundException : Example 7.4. T
和ExceptionMapper
所以我的问题是: 基本上,我有一个方法,其中我抓住了一个WebApplication异常(javax.ws.rs.WebApplication),但我的方法是抛出NotFound异常(com.sun.jersey.api.NotFound异常)。 所以我想这样处理两者: 但是,我得到了以下编译时错误: 异常NotFoundException已被替代WebApplicationException捕获
问题内容: 哪种方法更快,要返回JSON中的ajax,然后处理JSON响应以呈现html,或者只是将Ajax响应中的原始html放在一堆中呢? 问题答案: 要看。在这两种情况下,服务器都只是返回带有文本的响应。如果响应的JSON版本比HTML版本需要更多字符,则该响应将需要更长的时间才能传输回客户端,反之亦然。 但是,当然还有服务器端脚本必须完成其工作。在您的情况下,从服务器端脚本生成JSON可能
我有一个使用泽西和MOXy的JAX-RS服务。我有一个处理程序,它返回类型的JSON或XML(取决于标头)表示,但是如果没有找到该项目,它应该返回一个404错误不同的类型。 在第一种情况下(返回Memo),它可以正常工作,但在第二种情况下(抛出带有MemoError实体的WebApplication ationExcture)则不能正常工作。 如果我将处理程序更改为返回一个,则第二种情况确实有效(
问题内容: NSData * jsonData 是包含JSON数据的http响应。 我得到了结果: 将数据编码为正确的字符串而不是“ \ uxxxx”之类的Unicode字符串的正确方法是什么? 问题答案: 如果您转换JSON数据 到(例如使用)并打印字典 那么你会得到输出 原因是该方法对所有非ASCII字符使用“ \ Unnnn”转义序列。但这仅是为了在控制台中 显示 ,字典是 正确的 !