Java 使用Swagger注释时,响应中缺少JSON父/根元素
这是一个Spring引导应用程序,正如我在主题“appConfig”中提到的,当我添加Swagger时,响应中缺少根元素。在此论坛上的任何帮助都将不胜感激 以下是我的响应对象类:Java 使用Swagger注释时,响应中缺少JSON父/根元素,java,spring,maven,jackson,swagger,Java,Spring,Maven,Jackson,Swagger,这是一个Spring引导应用程序,正如我在主题“appConfig”中提到的,当我添加Swagger时,响应中缺少根元素。在此论坛上的任何帮助都将不胜感激 以下是我的响应对象类: @JsonRootName(value = "appConfig") public class AppConfig { // Using lombok for getter setters @Getter @Setter @JsonProperty("toggles") private
@JsonRootName(value = "appConfig")
public class AppConfig {
// Using lombok for getter setters
@Getter
@Setter
@JsonProperty("toggles")
private List<Toggle> toggles;
@Getter
@Setter
@JsonProperty("resources")
private List<Resource> resources;
这就是我在回答中得到的
//MISSING appConfig root element !!!!
{
"resources": [
{
"lastUpdateTimeStamp": "string",
"resourceName": "string"
}
],
"toggles": [
{
"name": "string",
"state": true
}
]
}
这是我对招摇过市的POM依赖:
<!-- Swagger dependencies -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
<scope>compile</scope>
</dependency>
围绕着丑陋的事物工作!定义一个虚拟响应对象,并将您的响应包装在其中。因此,斯威格剥离了这一点,给出了预期的答案。仍然在寻找答案 在ObjectMapper配置中启用以下属性:
jsonObjectMapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
jsonObjectMapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
我遇到了同样的问题,在使用swagger之前,我使用了带有getter和setter的response CustomResponse类:
public class CustomResponse<T> {
private T data;
private String message;
}
实施招摇过市后,结果如下:
{
"data" : {
"prop" : "prop",
"prop 1" : "prop1",
},
"message" : "true"
}
试图添加@JsonRootName(“CustomResponse”),但结果相同
这里是大摇大摆的配置:
@Bean
public Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
.additionalModels(typeResolver.resolve(CustomResponse.class))
.genericModelSubstitutes(CustomResponse.class)
.select().apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
还尝试了@amseager解决方案:
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
return mapper;
}
是否有任何方法可以返回具有根名称的响应。同样的问题@user3836681你找到更优雅的方式了吗?@Tornike看不到我的答案谢谢你的回复,得到了同样的结果,如果你能帮我同时添加@JsonRootName(“CustomResponse”)和对象映射器标志,请看我的情况?是的,我同时添加了这两个标志,现在添加了,回复修复了,但现在招摇不起作用,GET/myapp/null/swagger resources/configuration/ui/myapp/swagger resources/configuration/ui的映射无效@覆盖受保护的void configureMessageConverters(列表我不确定.additionalModels(typeResolver.resolve(CustomResponse.class))。尝试使用swagger配置也请发布控制器上的@Api注释不要在控制器中使用任何@Api注释,尝试使用response类进行ApiResponse注释,但结果相同
{
"data" : {
"prop" : "prop",
"prop 1" : "prop1",
},
"message" : "true"
}
@Bean
public Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
.additionalModels(typeResolver.resolve(CustomResponse.class))
.genericModelSubstitutes(CustomResponse.class)
.select().apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE);
return mapper;
}