我有一种方法的休息控制器。此方法采用一个标注为String
的{{1}}参数。由于此处未提及的原因,我被迫使用类型@RequestBody
并将其手动转换为String
。从API使用者的角度来看,正文是TestDTO
的类型,我想在SwaggerUI中显示这种类型。
不幸的是(很明显),张扬地显示出主体是TestDTO
的类型。看下面的图片。
我想要实现的是在Java代码中包含String
主体,在swagger代码中包含String
。如何强制Swagger显示?我试图找到注释及其属性,但失败了。
以下其他控制器代码:
TestDTO
答案 0 :(得分:1)
尝试将此注释放在您的方法上:
@ApiImplicitParam(name = "test", value = "testDTO", required = true, dataType = "TestDTO")
答案 1 :(得分:1)
我知道了。需要进行两项更改。
首先,就像@Dave Pateral的回答@ApiImplicitParams
中一样,必须添加
@RestController
@Api(tags = { "test" }, description = "test related resources")
public class TestController {
@Autowired
ObjectMapper mapper;
@ApiImplicitParams({
@ApiImplicitParam(name = "requestBody", required = true,
dataType = "TestDTO", paramType = "body")
})
@RequestMapping(path = "/test", method = RequestMethod.POST)
public void confirm(@RequestBody String requestBody) throws IOException {
//do sth with body
TestDTO dto = mapper.readValue(requestBody, TestDTO.class);
//do sth with dto
}
}
然后必须在摘要中注册隐式模型,以下是最小的工作示例
@Configuration
public class SwaggerConfiguration {
@Autowired
private TypeResolver typeResolver;
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.additionalModels(typeResolver.resolve(TestDTO.class));
}
}