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