Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Swagger注释时,响应中缺少JSON父/根元素_Java_Spring_Maven_Jackson_Swagger - Fatal编程技术网

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

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

这是一个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;
这就是我在回答中得到的

//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;
}