java - 使用 Swagger 注释时响应中缺少 JSON 父/根元素

标签 java spring maven jackson swagger

这是一个 Spring 引导应用程序,正如我在主题“appConfig”中提到的,当我添加 Swagger 时,响应中缺少根元素。在此论坛上的任何帮助将不胜感激。

这是我的响应对象类:

@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;

这是我的restController

 @RequestMapping(value = "/appConfig", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE })
    @ResponseStatus(HttpStatus.OK)
    public AppConfig appConfig() {
        final AppConfig appConfig =delegate.getAppConfig();
        return appConfig;
    }

这就是我在响应中得到的

//MISSING appConfig root element !!!!  
{
"resources": [
    {
      "lastUpdateTimeStamp": "string",
      "resourceName": "string"
    }
  ],
  "toggles": [
    {
      "name": "string",
      "state": true
    }
  ]
}

这是我对 Swagger 的 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>

这是我的 Swagger 配置类:

@Configuration
@EnableSwagger2
public class SwaggerConfig  extends WebMvcConfigurationSupport {                                    
    @Bean
    public Docket api() { 
        return new Docket(DocumentationType.SWAGGER_2)  
          .select()       
          .apis(RequestHandlerSelectors.any())
          .paths(PathSelectors.any())                          
          .build()
          .apiInfo(apiInfo());                                           
    }

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    private ApiInfo apiInfo() {
        return new ApiInfo(
          "Blah", 
          "Blah", 
          "Blah", 
          "Terms of service", 
          new Contact("Blah Administrator", "URL", "Email"), 
          "License of API", "API license URL");
   }

最佳答案

变通变丑!是定义一个虚拟响应对象并将您的响应包装在其中。所以 Swagger 剥离了它并给出了预期的答案。仍在寻找答案!

关于java - 使用 Swagger 注释时响应中缺少 JSON 父/根元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49672854/

相关文章:

java - 无法使用 JDBC 连接到 mySql docker 容器

表单加载时 Java GUI 绘制并填充矩形

java - 最终字符串的连接是如何在 Java 中完成的?

java - 如何从另一个 Web 服务调用一个 Web 服务(在同一个 WAR 中)

java - 如果我的应用程序中断,如何使用 ActiveMQ 恢复队列中的消息?

java - Spring MVC Showcase示例的Maven构建过程中出现错误

java - 与 ribbon/eureka 一起使用时假装客户端错误

java - 使用 Guava Graph 通过 ID 获取节点

maven - 在Windows 7 Enterprise N上安装Hadoop时出现问题

java - Maven 重新导入设置语言级别