Spring 文档 - 打开 API 3 - 如何将默认值设置为 body?
Spring docs - Open API 3 - How to set default values to body?
我正在使用 Spring 引导 + Spring 数据 Mongo + Spring REST + Spring HATEOAS实施 REST 端点。
因为我们要传递超过 5 个查询参数(组织的专有设置,应该不会传递),所以我想创建一个 EmployeeDto Class 并传递那个 class 在控制器
@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 = employeePagedAssembler.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/employee-data/employees/geographies?firstName=string&lastName=string&age=0&languageCd=string&isActive=string&email=string®ionCd=string&page=0&size=25&sort=firstName&order=ASC" -H "accept: 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) 如何为每个字段设置默认值而不是 "string" 似乎是默认值?
2) 如何简单地允许在 OAS3 中查看实际查询参数 UI?货币,看起来像 body.
我自己解决了这个问题。 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
为 [=16] =].
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;
}
我正在使用 Spring 引导 + Spring 数据 Mongo + Spring REST + Spring HATEOAS实施 REST 端点。
因为我们要传递超过 5 个查询参数(组织的专有设置,应该不会传递),所以我想创建一个 EmployeeDto Class 并传递那个 class 在控制器
@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 = employeePagedAssembler.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/employee-data/employees/geographies?firstName=string&lastName=string&age=0&languageCd=string&isActive=string&email=string®ionCd=string&page=0&size=25&sort=firstName&order=ASC" -H "accept: 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) 如何为每个字段设置默认值而不是 "string" 似乎是默认值?
2) 如何简单地允许在 OAS3 中查看实际查询参数 UI?货币,看起来像 body.
我自己解决了这个问题。 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
为 [=16] =].
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;
}