apache / apache/servicecomb-java-chassis
从CSE 1.X 升级到 CSE 2.X后,接口配置的swagger注解@ApiImplicitParams 参数失效
- Ngôn ngữ chính
- Java
- Star
- 1.9k
- Fork
- 814
- Merge trung bình
- 8 ngày 23 giờ
- Pull request đã merge (30 ngày)
- 1
Mô tả
### 问题背景:
从CSE 1.X 升级到 CSE 2.X后,接口配置的swagger注解@ApiImplicitParams 参数失效
接口定义如下:
```java
@RequestMapping(path = "/v1/test", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "x-test-header", dataType = "string", required = false,
paramType = "header", value = "xxx",
allowableValues = "true,false")})
public String testV1(HttpServletRequest request) {
return "ok";
}
```
使用CSE 1.X时,如果传入的header不是true或者false,报错如下:
```json
{
"message": "Parameter is not valid for operation [XXX.XXX.testV1]. Parameter is [x-test-header]. Processor is [header]."
}
```
使用CSE 3.X时,接口无报错
### 问题分析:
通过对比CSE 1.X和2.X的代码,发现org.apache.servicecomb.common.rest.codec.RestCodec#restToArgs将request请求转发为请求对象的过程中,org.apache.servicecomb.common.rest.definition.RestOperationMeta#init中创建Type的代码进行了调整
从
```
Method method = operationMeta.getMethod();
Type[] genericParamTypes = method.getGenericParameterTypes();
```
调整为
```
(Type)operationMeta.getSwaggerProducerOperation().getSwaggerParameterTypes().get(parameter.getName())
```
导致type丢失了枚举信息
请帮忙确认是否需要跟CSE 1.X保持兼容以及其他类似注解是否有相同问题
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu tại org.apache.servicecomb.common.rest.codec.RestCodec#restToArgs và RestOperationMeta#init, sau đó so sánh các đường dẫn tạo kiểu của CSE 1.X và 2.X được nêu trong issue. Kiểm tra cách Swagger @ApiImplicitParams allowableValues và các annotation liên quan được biểu diễn trong CSE 2.X và 3.X. Hoàn thành khi xác định được liệu có cần khả năng tương thích validation với 1.X hay không và xác nhận được liệu các annotation tương tự có làm mất thông tin enum hay không.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- api, backend
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100