Spring Docs - Открытый API 3 - Как установить значения по умолчанию для тела? - PullRequest
1 голос
/ 25 марта 2020

Я использую Spring Boot + Spring Data Mon go + Spring REST + Spring HATEOAS для реализации конечных точек REST.

Поскольку мы передаем более 5 параметров запроса (проприетарные настройка Org, которая, как предполагается, не была передана), поэтому я хотел бы создать класс EmployeeDto и передать этот класс в Controller

@GetMapping(value = "/employees", produces = {MediaType.APPLICATION_JSON })
public ResponseEntity<PagedModel<EmployeeModel>> findEmployees(
        EmployeeDto dto,
        @Parameter(hidden=true) String sort,
        @Parameter(hidden=true) String order,
        @Parameter(hidden=true) Pageable pageRequest) {

    // Add needed logic 
    ......
    ......
    ......
    PagedModel<EmployeeModel> model = countryOutPagedAssembler.toModel(response, employeeAssembler);

    return new ResponseEntity<>(model, HttpStatus.OK);
}

Swagger UI, он отображается как -

{
  "firstName": "string",
  "lastName": "string",
  "age": 0,
  "languageCd": "string",
  "isActive": "string",
  "email": "string",
  "regionCd": "string"
}

Команда CURL:

curl -X GET "http://localhost: 8080 / данные-сотрудников / сотрудники / географии? FirstName = строка & lastName = строка & возраст = 0 & languageCd = строка & isActive = string & email = string®ionCd = string & page = 0 & size = 25 & sort = firstName & order = AS C "-H" принять: application / json "

EmployeeDto. java

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@Schema
public class EmployeeDto {
    @Schema(description = AppConstants.FIRSTNAME, defaultValue="")
    private String firstName; 

    @Schema(description = AppConstants.LASTNAME, defaultValue="")
    private String lastName; 

    @Schema(description = AppConstants.AGE, defaultValue="")
    private Integer age; 

    @Schema(description = AppConstants.LANG_CD_DESC, defaultValue="0")
    private String languageCd;

    @Schema(description = AppConstants.ISACTIVE, defaultValue="")
    private String isActive; 

    @Schema(description = AppConstants.EMAIL, defaultValue="")
    private String email; 

    @Schema(description = AppConstants.REGION_CD_DESC, defaultValue="")
    private String regionCd;
}

Я ищу -

1) Как установить значение по умолчанию для каждого поля вместо "строки", которые кажутся приходящими по умолчанию?

2) Как просто разрешить увидеть фактические параметры запроса в OAS3 UI? Валюта, это похоже на тело.

1 Ответ

2 голосов
/ 07 апреля 2020

Я смог решить эту проблему сам. example - Provides an example of the schema. When associated with a specific media type, the example string shall be parsed by the consumer to be treated as an object or an array.

Код -

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@Schema
public class EmployeeDto {
    @Schema(description = AppConstants.FIRSTNAME, type = "string", example = " ")
    private String firstName; 

    @Schema(description = AppConstants.LASTNAME, type = "string", example = " ")
    private String lastName; 

    @Schema(description = AppConstants.AGE, type = "string", example = "null")
    private Integer age; 

    @Schema(description = AppConstants.LANG_CD_DESC, type = "string", example = " ")
    private String languageCd;

    @Schema(description = AppConstants.ISACTIVE, type = "string", example = " ")
    private String isActive; 

    @Schema(description = AppConstants.EMAIL, type = "string", example = " ")
    private String email; 

    @Schema(description = AppConstants.REGION_CD_DESC, type = "string", example = " ")
    private String regionCd;
}

, и на контроллере просто добавьте приведенный ниже метод, который будет сбрасываться при отправке значения "null", если да, он сбрасывает его на "" и то же самое для Integer до null.

public static Object getDefaulter(Object obj) {
    Arrays.stream(obj.getClass().getDeclaredFields()).map(f -> {
        f.setAccessible(true);
        try {
            // set null values only if found String value as "null"
            if (Objects.equals(f.get(obj), "null")) {
                f.set(obj, "");
            }else if(Objects.equals(f.get(obj), 0)) {
                f.set(obj, null);
            }
        } catch (IllegalArgumentException | IllegalAccessException e) {
            //
        }
        return f;
    }).collect(Collectors.toList());
    return obj;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...