我们正在使用Swagger来记录我们的REST API。
我们在Spring REST控制器中使用各种swagger注释
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
@RestController
@RequestMapping("/api/blah")
@Api("Blah")
public class SomeRestController {
@RequestMapping(path = "/some_endpoint", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ApiOperation(code = CREATED, value = "Some operation",
response = SomeResponseClass.class)
@ApiResponses(value = {
@ApiResponse(code = CREATED, message = "etc")
})
public DeferredResult<SomeResponseClass> doSomething(
@RequestBody final SomeRequest req) {
// do stuff
}
}
生成文档时,它包含我们使用的所有数据对象及其包含所有字段的定义。但是,我们希望配置数据对象中的字段在Swagger文档中的显示方式。例如,我们可能想要驼峰字段的字段名称。
暂时将Swagger放在一边我知道我们可以使用Jackson注释以我们想要的方式配置字段(使用@JsonProperty("")
)。我们想使用mixins将它与数据对象分开,然后使用jackson ObjectMapper将mixins注册到数据对象。
我的问题是如何使用Swagger注册此ObjectMapper,以便根据注释生成文档?
来自this thread的答案看起来很有希望,但我不知道应该在哪里添加答案中提到的转换器工厂类。我不知道如何配置Swagger启动。有什么想法吗?
答案 0 :(得分:0)
我不确定我是否真的回答了你的问题......但是这里是你如何在Spring Boot中配置Jackson mixins(我假设你使用Spring Boot)。
我将以此类为例:
public class Something {
private String fieldA;
private Integer fieldB;
// getters, setters, hashCode...
}
我想将fieldA
序列化为field_a
,我想忽略fieldB
。首先,我为Jackson创建了一个mixin:
public interface SomethingMixin {
@JsonProperty("field_a")
String getFieldA();
@JsonIgnore
Integer getFieldB();
}
然后我将使用配置类为我的ObjectMapper
配置Spring:
@Configuration
public class JacksonConfiguration {
@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.mixIn(Something.class, SomethingMixin.class);
// Equivalent to your Google thread:
// builder.propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
return builder;
}
}
它应该对所有默认ObjectMapper
使用此配置,包括Swagger文档(使用springfox-swagger
测试)。