Spring boot 验证Openapi 3.0 Spring Boot RESTful API中的URL参数?
在我的openapi规范中,我为特定的资源路径指定URL参数,如下所示:Spring boot 验证Openapi 3.0 Spring Boot RESTful API中的URL参数?,spring-boot,rest,validation,openapi,url-parameters,Spring Boot,Rest,Validation,Openapi,Url Parameters,在我的openapi规范中,我为特定的资源路径指定URL参数,如下所示: paths: /some/path: get: summary: some summary parameters: name: usefulParameter description: schema: type: string maxLength: 15 使用openapi 3.0 codegen
paths:
/some/path:
get:
summary: some summary
parameters:
name: usefulParameter
description:
schema:
type: string
maxLength: 15
使用openapi 3.0 codegen,我生成了一个Spring Boot RESTful API,该API会自动生成一个名为xxDelegate的接口,该接口具有必须实现的方法,如:
default ResponseEntity<Object> somePathGet(String usefulParameter) {
getRequest().ifPresent(request -> {
for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
String exampleString = "null";
ApiUtil.setExampleResponse(request, "application/json", exampleString);
break;
}
}
});
return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
}
defaultresponseEntity somePathGet(字符串usefulParameter){
getRequest().ifPresent(请求->{
for(MediaType MediaType:MediaType.parseMediaTypes(request.getHeader(“Accept”)){
if(mediaType.isCompatibleWith(mediaType.valueOf(“application/json”)){
String exampleString=“null”;
setExampleResponse(请求,“application/json”,exampleString);
打破
}
}
});
返回新的响应状态(HttpStatus.NOT_IMPLEMENTED);
}
界面顶部有一条注释,说明:
由{@link YourApiController}调用的委托。
使用{@link org.springframework.stereotype.Service}注释类实现此接口
所以我就是这样做的,这就产生了我自己的类,看起来像这样:
@Service
public class MyCustomClass implements xxxxDelegate {
@Override
public ResponseEntity<Object> somePathGet(String usefulParameter) {
}
}
@服务
公共类MyCustomClass实现xxxDelegate{
@凌驾
公共响应属性somePathGet(字符串usefulParameter){
}
}
到目前为止,这一切都非常有效。我可以调用它并记录输入参数。我遇到的问题是,我似乎在任何地方都找不到关于如何将验证分配给该输入参数的文档——Openapi“maxLength”没有被应用,而且Spring/Spring Boot似乎没有提供一种将验证应用于这些参数的方法,除非您使用模型类型类并注释成员。我更愿意避免这种情况,而是简单地告诉API,这个URL参数需要特定的验证,比如最小/最大长度,或者某个字符集
这可能吗?您能解决这个问题吗?面对类似的问题,没有找到解决办法。请更新我,如果你有一个好的。谢谢