почему необходимо возвращать объект Response вместо объекта String в HTTP-запрос в java?

Молодой Эмиль

Я определил свой метод 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-запрос, если вы можете просто вернуть String. Если это необходимо, скажите, пожалуйста, почему, потому что я не могу понять, какой из них подходит для HTTP-запроса. Я также боюсь, что объект Response может вызвать проблемы, с которыми я не смогу справиться.

11-е измерение

Если вы вернете простую строку, вы не сможете контролировать, что произойдет в случае ошибки. Но если вы вернете объект 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обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    Как не использовать HttpClient с ЛЮБЫМ сертификата SSL, независимо от того, как «плохо» это

  3. 3

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  4. 4

    Elasticsearch - Нечеткий поиск не дает предложения

  5. 5

    Modbus Python Schneider PM5300

  6. 6

    Автозаполнение с Java, Redis, Elastic Search, Монго

  7. 7

    Ошибка «LINK: фатальная ошибка LNK1123: сбой при преобразовании в COFF: файл недействителен или поврежден» после установки Visual Studio 2012 Release Preview

  8. 8

    (fields.E300) Поле определяет связь с моделью, которая либо не установлена, либо является абстрактной.

  9. 9

    Проблемы со сборкой Python Image Registration Toolkit

  10. 10

    Vue js CLI 2 импортирует и использует плагин javascript

  11. 11

    Как отправить файл с сообщением в Discord с помощью JDA?

  12. 12

    В чем разница между CRC-16 / CCITT-FALSE и CRC-16 / X-25?

  13. 13

    Single legend for Plotly subplot for line plots created from two data frames in R

  14. 14

    Vim - автокоманды игнорируются в коде автокоманд

  15. 15

    Метод ошибки Illuminate \\ Database \\ Eloquent \\ Collection :: save не существует. в Laravel

  16. 16

    Статус HTTP 403 - ожидаемый токен CSRF не найден

  17. 17

    Ленивое объединение FPU в Cortex-M4F

  18. 18

    Работа с отсутствующими значениями для одной переменной в R

  19. 19

    Как очистить или очистить StringBuilder?

  20. 20

    PyQt5 не работает как «подходящий UI Toolkit» для Mayavi с Python 3.6.

  21. 21

    Vue 2 с Vue CLI - как сделать src / static static, чтобы я мог использовать изображения, которые там есть?

популярныйтег

файл