Java 如何使SpringFox Swagger将字符串参数渲染为另一种模型类型?
如何将Swagger文档作为字符串资源参数作为完整的类类型 即,我有以下资源声明:Java 如何使SpringFox Swagger将字符串参数渲染为另一种模型类型?,java,swagger,springfox,Java,Swagger,Springfox,如何将Swagger文档作为字符串资源参数作为完整的类类型 即,我有以下资源声明: @PatchMapping(path="/{id}") public ApiResponse<MyObject> patch(@PathVariable String id, @RequestBody String myObjText) { @PatchMapping(path=“/{id}”) 公共ApiResponse修补程序(@PathVariable String id、@RequestBo
@PatchMapping(path="/{id}")
public ApiResponse<MyObject> patch(@PathVariable String id, @RequestBody String myObjText) {
@PatchMapping(path=“/{id}”)
公共ApiResponse修补程序(@PathVariable String id、@RequestBody String myObjText){
我希望myobjecttext
被记录为具有类型为MyObject
的模型,同时仍然能够在方法体中获取原始JSON文本(这是因为我以后想通过JacksonobjectMapper
调用ReaderForUpdate()
)
对于@RequestBody
参数,@ApiParam
似乎被忽略,并且不允许有任何@ApiModel*
注释
我正在使用
springfox
,因为这些是Spring Rest资源。尝试将字符串param重写为@ApiParam(hidden=true)
并添加
对象的新参数:
@ApiImplicitParams({
@ApiImplicitParam(name = "My obj text",
value = "myObjText", required = true,
dataType = "com.example.MyObject", paramType = "body")
})
就像在这里实现的一样:
在我的情况下,需要进行两项更改: 1) 添加了
@ImplicitParams
(类型名称不符合包名称)
2) 注册的隐式模型类型(特别是当响应类型为ResponseEntity(Void.class)
我认为这是不可能的。如果请求主体是字符串类型的任何字符串(不仅仅是json字符串)API将接受。Spring有一种自定义默认ObjectMapper的方法,您可以尝试。请参阅这里的@Archit,我不担心验证或进一步的数据处理,我只希望文档比提供有关参数格式的通用
字符串类型更具描述性OK。那么您可能正在处理字符串在控制器代码中显式验证,否则客户端可以使用任何随机负载调用API。@watery我正在尝试实现同样的效果。您找到解决方案了吗?@Marc我最终使用了-请参阅GitHub的进一步问题。这不起作用(我想知道这是否是Springfox的问题)。当数据类型
参数具有非软件包限定值时,这似乎有效,即dataType=“MyObject”
(请参阅SpringFox)。可能我只使用Jersey对其进行了测试。
@ApiImplicitParams({
@ApiImplicitParam(name = "requestBody", required = true,
dataType = "MyObject", paramType = "body")
})
@Configuration
public class SwaggerConfiguration {
@Autowired
private TypeResolver typeResolver;
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.additionalModels(typeResolver.resolve(MyObject.class));
}
}