#rest #jax-rs #httpresponse #openapi
#rest #jax-rs #httpresponse #openapi
Вопрос:
У меня есть служба REST, и я определил подпись API с помощью файла YAML OpenAPI.
Что-то вроде,
title: Sample Pet Store App
description: This is a sample server for a pet store.
termsOfService: http://example.com/terms/
contact:
name: API Support
url: http://www.example.com/support
email: support@example.com
paths:
v1/employees/{employeeId}:
get:
responses:
'200':
content:
....
Из файла YAML я генерирую запросы API, используя что-то вроде генератора OpenAPI.
Но как мне указать https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/Response.html , в моем файле YAML?
Вот как я хочу отправить ответ из моего Java-кода. Я хочу знать, как я могу добавить этот объект ответа в YAML OpenAPI?
import javax.ws.rs.core.Response;
@Path("/v1/employees")
public Response getEmployee(String employeeId) {
// ...
return Response
.status(Response.Status.OK)
.entity(employee)
.build();
}
Я новичок в разработке REST API. Я проверил документацию, но не смог найти в OpenAPI подробностей о том, как добавить ответ Javax.
Ответ №1:
Зависит от используемого вами шаблона, по умолчанию его там нет, но вы можете создать пользовательский шаблон для использования.
вот список доступных шаблонов.
вы должны указать тип ответа, который вы возвращаете в спецификации OpenAPI. вот так:
v1/employees/{employeeId}:
get:
operationId: getUser
responses:
200:
description: Return user
content:
application/json:
schema:
$ref: '#/components/schemas/UsertResponseDTO'
после этого, если вы используете шаблон по умолчанию, добавьте вручную ответ с опечаткой следующим образом:
import javax.ws.rs.core.Response;
@Path("/v1/employees")
public Response getEmployee(String employeeId) {
// ...
return Response.ok(employee).build();
}
Ответ №2:
Чтобы решить мою проблему, вместо возврата объекта ответа я использовал исключение javax.ws.rs.WebApplicationException и добавил код ExceptionTranslator для преобразования всех моих исключений в исключение WebApplicationException.
Вот пример кода для перевода исключений.
// Actual code to convert Java exception into javax.ws.rs.WebApplicationException.
catch (Exception e) {
throw new WebApplicationException(getResponse(e));
}
// Exception translation code sample. This can be made into a nice generic function to handle different types of exceptions.
Response getResponse(Throwable t) {
if (throwable instanceof NotFoundException) {
Error error = new Error();
error.setType("404");
error.setMessage("Requested entry could not be found");
Response.status(Status.NOT_FOUND)
.entity(error)
.build();
}
}