useDefaultResponseMessages(false)无法正常工作

时间:2017-07-04 09:24:07

标签: spring spring-boot swagger swagger-ui swagger-codegen

我正在使用swagger-codegen创建一个spring-server。

我还使用了.useDefaultResponseMessages(false) - 属性 如Swagger - Springfox always generates some response messages (401,403...) by default. How can I remove them?

中所述

SwaggerConfig.java:

public Docket customImplementation() {
return new Docket(DocumentationType.SWAGGER_2)
    .useDefaultResponseMessages(false)
    .select()
    .apis(RequestHandlerSelectors.basePackage("myrest.api"))
    .build()
    .directModelSubstitute(org.joda.time.LocalDate.class, java.sql.Date.class)
    .directModelSubstitute(org.joda.time.DateTime.class, java.util.Date.class)
    .apiInfo(apiInfo());}

相关的apipart:Api.java:

    @ApiOperation(value = "", notes = "Returns all clouds from the system that the user has access to ", response = Cloud.class, responseContainer = "List", tags = {
      "cloud",})
  @ApiResponses(value = {
      @ApiResponse(code = 200, message = "All clouds ", response = Cloud.class),
        /*@ApiResponse(code = 401, message = "Authorization for this action is missing", response = Error.class),
        @ApiResponse(code = 403, message = "Forbidden action", response = Error.class),
        @ApiResponse(code = 500, message = "An unexpected Error occured", response = Error.class),*/
      @ApiResponse(code = 504, message = "Server temporary not available", response = Error.class)})

  @RequestMapping(value = "/clouds",
      produces = {"application/json"},
      method = RequestMethod.GET)
  ResponseEntity<List<Cloud>> findClouds();

但swagger-ui仍然看起来像: swagger-ui: ResponseMessageTable

所以似乎.useDefaultResponseMessages(false)无效。

如何禁用这些默认错误响应?

@John Duskin

我更改了Docketinitialization,将@Controller更改为@Restcontroller但我仍然通过Get

获得了404消息

different looking 404-Message

Swagger-Codegen生成的Serverstubs如下:

Api.java:

@Api(value = "clouds", description = "the clouds API")
public interface CloudsApi {

@ApiOperation(value = "", notes = "Returns all clouds from the system that the user has access to ", response = Cloud.class, responseContainer = "List", tags={ "cloud", })
@ApiResponses(value = {
        @ApiResponse(code = 200, message = "All clouds ", response = Cloud.class),
        @ApiResponse(code = 401, message = "Authorization for this action is missing", response = Cloud.class),
        @ApiResponse(code = 403, message = "Forbidden action", response = Cloud.class),
        @ApiResponse(code = 500, message = "An unexpected Error occured", response = Cloud.class),
        @ApiResponse(code = 504, message = "Server temporary not available", response = Cloud.class) })

@RequestMapping(value = "/clouds",
        produces = { "application/json" },
        method = RequestMethod.GET)
ResponseEntity<List<Cloud>> findClouds();

和分离的Controller:

@RestController
public class CloudsApiController implements CloudsApi {

@Autowired
private UserService userService;
@Autowired
private CloudService cloudService;

public ResponseEntity<List<Cloud>> findClouds() {
//do some magic
    return new ResponseEntity<List<Cloud>>(cloudList, HttpStatus.OK);
}
[...]
}

2 个答案:

答案 0 :(得分:0)

尝试在Docket中的构建方法之后调用useDefaultResponseMessages。我已经更新了你的代码以显示我的意思。

希望有所帮助。

public Docket customImplementation() {
    return new Docket(DocumentationType.SWAGGER_2)
      .select()
      .apis(RequestHandlerSelectors.basePackage("myrest.api"))
      .build()
      .useDefaultResponseMessages(false)
      .directModelSubstitute(org.joda.time.LocalDate.class, java.sql.Date.class)
      .directModelSubstitute(org.joda.time.DateTime.class, java.util.Date.class)
      .apiInfo(apiInfo());
}

要让我的机器上的呼叫正常工作,我已将ApiReponses与控制器放在一起

@RestController
@RequestMapping("/my_model")
@ApiResponses(value = { @ApiResponse(code = 200, message = "OK"),
    @ApiResponse(code = 500, message = "Rocks fell, everyone died.") })

<强>更新

您是否对方法进行了描述?

以下是我的项目工作。请注意,API响应已附加到控制器。

@RestController
@RequestMapping("/my_model/gogo")
@ApiResponses(value = { @ApiResponse(code = 200, message = "OK"),
@ApiResponse(code = 500, message = "Rocks Fall") })
public class GoGoClass {

@RequestMapping(method = RequestMethod.POST)
@ApiOperation(value = "Description")
public void run(
        @ApiParam(value = "Param1 description") @RequestParam(required = true) final String param1,
        @ApiParam(value = "Param 2 description")  final String param2)
        throws ModelException {
        // Do stuff
        }
}

答案 1 :(得分:0)

解决了工作问题......

这是一个Spring注释问题。 在我的SwaggerDocumentationConfig.java中,我添加了@EnableSwagger2,一切都按原样运行

@Configuration
@EnableSwagger2
public class SwaggerDocumentationConfig {

@Bean
public Docket customImplementation(){
    return new Docket(DocumentationType.SWAGGER_2)
            .useDefaultResponseMessages(false)
            .select()
                .apis(RequestHandlerSelectors.basePackage("myrest.api"))
                .build()
            .directModelSubstitute(org.joda.time.LocalDate.class, java.sql.Date.class)
            .directModelSubstitute(org.joda.time.DateTime.class, java.util.Date.class)
            .apiInfo(apiInfo());
    }
}