为什么需要在Java中向HTTP请求返回Response对象而不是String对象?

年轻的埃米尔

我定义了我的REST方法以返回String数据类型作为对http请求的响应。就是这个:

    @Path("/users/{name}/")
    @GET
    @Produces("application/json")
    public String getAllUserMemberships(@PathParam("name") String name) throws Exception{

        String doc = "{\"name\":\""+name+"\",\"message\":\"Logged in\"}";

        return doc;
    }

它工作正常,但是有人告诉我要返回一个javax.ws.rs.core.Response对象,如下面的示例代码所示。这也可以正常工作,他说这是响应HTTP请求的最佳方法,但是他不知道为什么。

    @Path("/users/{name}/")
    @GET
    @Produces("application/json")
    public Response getAllUserMemberships(@PathParam("name") String name) throws Exception{

        String doc = "{\"name\":\""+name+"\",\"message\":\"Logged in\"}";


        return Response.ok(doc, MediaType.APPLICATION_JSON).build();
    }

我的问题是:仅返回字符串时,是否有必要将Response对象返回到HTTP请求。如果有必要,请告诉我为什么,因为对于HTTP请求的目的,哪一个是正确的感到困惑。我还担心Response对象可能会给我一些我无法处理的问题。

11维

如果返回简单的String,则无法控制发生错误的情况。但是,如果您返回Response对象,则可以返回一条带有错误消息的适当的500错误:

try {
    return Response.ok(successResult).build();
} catch(Exception ex) {
    return Response.serverError().entity(fault).build();
    //or
    return Response.status(500).entity(fault).build();
}

正如其他人所说,它使您可以控制HTTP响应的其他方面,例如设置一些有用的标头:

Response response = Response.ok(successResult);

response.getHeaders().put("Access-Control-Allow-Origin", "*");
response.getHeaders().put("Access-Control-Allow-Headers",
        "origin, content-type, accept, authorization");
response.getHeaders().put("Access-Control-Allow-Credentials", "true");
response.getHeaders().put("Access-Control-Allow-Methods",
        "GET, POST, PUT, DELETE, OPTIONS, HEAD");

发送文件也很容易:

File fileToSend = getFile();
return Response.ok(fileToSend, "application/zip").build();

因此,有很多原因,如果不想做任何特殊的事情,那么如果您确实想修改HTTP响应属性,只需返回对象就可以了,那么您必须使用Response。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么需要在对象中的函数中的if语句中的“ this”内部而不是外部?的JavaScript

来自分类Dev

为什么get方法未在reqwest中返回Response对象?

来自分类Dev

为什么vuex在Quasar App中返回对象而不是数组?

来自分类Dev

为什么SQL返回数组而不是对象?

来自分类Dev

为什么jQuery返回整数而不是对象?

来自分类Dev

为什么我需要在我的打字稿对象中访问 `default`?

来自分类Dev

为什么我们需要在堆中创建一个对象?

来自分类Dev

为什么在 Java 中不使用实例对象而不是 ThreadLocal?

来自分类Dev

为什么对Expression.TypeAs的求值返回的是基础具体类型的对象,而不是我请求它的接口?

来自分类Dev

在计算对象中的字母数时,为什么需要在增加对象之前测试该属性是否存在?

来自分类Dev

为什么Angular $ resource返回Resource对象而不是class对象?

来自分类Dev

为什么该工厂返回$$ state对象而不是response.data?

来自分类Java

为什么需要(在聚合对象中)EventSourcingHandler?

来自分类Dev

从返回类型的 http 请求 Promise<Response> 制作对象数组

来自分类Dev

为什么字符串对象需要#include <string>而不是字符串文字?

来自分类Dev

如何返回正确的Http Response而不是JSON对象

来自分类Dev

为什么只读对象需要对象中的可选属性?

来自分类Dev

JVM为什么要在内存中重定位对象?

来自分类Dev

为什么要在变量中存储Promise对象?

来自分类Dev

为什么要在堆中创建全局对象?

来自分类Dev

为什么要在构造函数中声明对象属性

来自分类Dev

为什么我需要在Python中复制类实例,而无需复制其他对象类型?

来自分类Dev

为什么我的Ajax请求从wordpress返回空对象?

来自分类Dev

为什么对象不需要时Java中的数组需要具有预定义的长度?

来自分类Dev

为什么@AuthenticationPrincipal返回Authentication而不是主体对象?

来自分类Dev

返回的jQuery prevObject而不是实际的对象(画布)。为什么?

来自分类Dev

为什么此脚本返回“'null'不是对象”?

来自分类Dev

为什么我的代码返回对象的类型而不是它的值?

来自分类Python

为什么map在Python 3中返回地图对象而不是列表?

Related 相关文章

  1. 1

    为什么需要在对象中的函数中的if语句中的“ this”内部而不是外部?的JavaScript

  2. 2

    为什么get方法未在reqwest中返回Response对象?

  3. 3

    为什么vuex在Quasar App中返回对象而不是数组?

  4. 4

    为什么SQL返回数组而不是对象?

  5. 5

    为什么jQuery返回整数而不是对象?

  6. 6

    为什么我需要在我的打字稿对象中访问 `default`?

  7. 7

    为什么我们需要在堆中创建一个对象?

  8. 8

    为什么在 Java 中不使用实例对象而不是 ThreadLocal?

  9. 9

    为什么对Expression.TypeAs的求值返回的是基础具体类型的对象,而不是我请求它的接口?

  10. 10

    在计算对象中的字母数时,为什么需要在增加对象之前测试该属性是否存在?

  11. 11

    为什么Angular $ resource返回Resource对象而不是class对象?

  12. 12

    为什么该工厂返回$$ state对象而不是response.data?

  13. 13

    为什么需要(在聚合对象中)EventSourcingHandler?

  14. 14

    从返回类型的 http 请求 Promise<Response> 制作对象数组

  15. 15

    为什么字符串对象需要#include <string>而不是字符串文字?

  16. 16

    如何返回正确的Http Response而不是JSON对象

  17. 17

    为什么只读对象需要对象中的可选属性?

  18. 18

    JVM为什么要在内存中重定位对象?

  19. 19

    为什么要在变量中存储Promise对象?

  20. 20

    为什么要在堆中创建全局对象?

  21. 21

    为什么要在构造函数中声明对象属性

  22. 22

    为什么我需要在Python中复制类实例,而无需复制其他对象类型?

  23. 23

    为什么我的Ajax请求从wordpress返回空对象?

  24. 24

    为什么对象不需要时Java中的数组需要具有预定义的长度?

  25. 25

    为什么@AuthenticationPrincipal返回Authentication而不是主体对象?

  26. 26

    返回的jQuery prevObject而不是实际的对象(画布)。为什么?

  27. 27

    为什么此脚本返回“'null'不是对象”?

  28. 28

    为什么我的代码返回对象的类型而不是它的值?

  29. 29

    为什么map在Python 3中返回地图对象而不是列表?

热门标签

归档