Spring docs-Open API 3-如何将默认值设置为body



我使用Spring Boot+Spring Data Mongo+Spring REST+Spring HATEOAS来实现REST端点。

由于我们传递了5个以上的查询参数(组织的专有设置,应该不会传递(,所以我想创建一个EmployeeDo类,并在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 = 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-数据/员工/地域?firstName=字符串&lastName=string&年龄=0&languageCd=字符串&isActive=字符串&电子邮件=字符串&regionCd=字符串&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( 如何设置每个字段的默认值,而不是看起来默认的"字符串"?

2( 如何简单地允许在OAS3 UI中查看实际的查询参数?货币,它看起来像身体。

我自己解决了这个问题。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"值,则将重置该方法,如果是,则将其重置为"",并且对于Integernull也是如此。

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;
}

相关内容

  • 没有找到相关文章

最新更新