Как добавить ответ JAX-RS в файл OpenAPI YAML

#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();
    }
}