微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尽管映射正确,但APISpring Boot-SwaggerHub生成的结果为404

如何解决尽管映射正确,但APISpring Boot-SwaggerHub生成的结果为404

我最近正在使用SwaggerHub,并且由于访问管理(Keycloak的原因,尝试将生成的Spring-Boot api中的spring-boot版本(从1.5.22.RELEASE升级到2.3.3.RELEASE)。

将spring-boot版本升级到2.0.1.RELEASE确实使用Keycloak解决了该问题,但是api的每个路径都导致404错误。总之,尽管已根据日志进行映射,但无法访问任何路径。

版本问题:

1.5.22.RELEASE:可以访问API路径-获取NoClassDefFoundError:WebServerFactoryCustomizer

2.0.0.RELEASE-2.0.9.RELEASE:正在映射API路径,但没有访问权限-启动时Keycloak没有错误

2.1.0.RELEASE-2.3.3.RELEASE::API路径未映射-启动时Keycloak没有错误

这是使用2.0.1.RELEASE的日志的一部分:

2020-10-05 10:46:47.012  INFO 25040 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/getIcnByNumber],methods=[GET],produces=[application/json]}" onto public org.springframework.http.ResponseEntity<java.util.List<io.swagger.model.ModelConfiguration>> io.swagger.api.GetIcnByNumberApiController.getIcnByNumber()
2020-10-05 10:46:47.015  INFO 25040 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/getMyConfigurations],produces=[application/json]}" onto public org.springframework.http.ResponseEntity<java.util.List<io.swagger.model.ModelConfiguration>> io.swagger.api.GetMyConfigurationsApiController.callConfiguration()
2020-10-05 10:46:47.017  INFO 25040 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/getMyProjects],produces=[application/json]}" onto public org.springframework.http.ResponseEntity<java.util.List<io.swagger.model.ProjectModel>> io.swagger.api.GetMyProjectsApiController.getMyProjectsGet()
2020-10-05 10:46:47.020  INFO 25040 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/getProjectConfiguration/{projectId}],produces=[application/json]}" onto public org.springframework.http.ResponseEntity<io.swagger.model.ProjectConfiguration> io.swagger.api.GetProjectConfigurationApiController.getProjectConfigurationProjectIdGet(java.lang.String)
2020-10-05 10:46:47.021  INFO 25040 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/getRequestOverview],produces=[application/json]}" onto public org.springframework.http.ResponseEntity<java.util.List<io.swagger.model.RequestOverview>> io.swagger.api.GetRequestOverviewApiController.getRequestOverview()

代码示例:

/ getMyConfigurations-接口:

/**
 * NOTE: This class is auto generated by the swagger code generator program (3.0.21).
 * https://github.com/swagger-api/swagger-codegen
 * Do not edit the class manually.
 */
package io.swagger.api;

import io.swagger.model.ModelConfiguration;
import io.swagger.annotations.*;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.multipartfile;
import org.springframework.web.bind.annotation.CookieValue;

import javax.validation.Valid;
import javax.validation.constraints.*;
import java.util.List;
import java.util.Map;
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen",date = "2020-09-14T09:55:45.552Z[GMT]")
@Api(value = "getMyConfigurations",description = "the getMyConfigurations API")
public interface GetMyConfigurationsApi {

    @ApiOperation(value = "searches inventory",nickname = "callConfiguration",notes = "By passing in the appropriate options,you can search for available inventory in the system ",response = ModelConfiguration.class,responseContainer = "List",tags={ "developers",})
    @ApiResponses(value = { 
        @ApiResponse(code = 200,message = "search results matching criteria",responseContainer = "List"),@ApiResponse(code = 400,message = "bad input parameter") })
    @RequestMapping(value = "/getMyConfigurations",produces = { "application/json" },method = RequestMethod.GET)
    ResponseEntity<List<ModelConfiguration>> callConfiguration();

}

/ getMyConfigurations-控制器:

package io.swagger.api;

import io.swagger.model.ModelConfiguration;
import io.swagger.model.Originator;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.multipartfile;

import javax.validation.constraints.*;
import javax.validation.Valid;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen",date = "2020-08-28T09:14:46.542Z[GMT]")
@Controller
public class GetMyConfigurationsApiController implements GetMyConfigurationsApi {

    private static final Logger log = LoggerFactory.getLogger(GetMyConfigurationsApiController.class);

    private final ObjectMapper objectMapper;

    private final HttpServletRequest request;

    @org.springframework.beans.factory.annotation.Autowired
    public GetMyConfigurationsApiController(ObjectMapper objectMapper,HttpServletRequest request) {
        this.objectMapper = objectMapper;
        this.request = request;
    }

    public ResponseEntity<List<ModelConfiguration>> callConfiguration() {
        ArrayList<ModelConfiguration> mcList = new ArrayList<>();
        
        
        return new ResponseEntity<List<ModelConfiguration>>(mcList,HttpStatus.OK);
    }
}

编辑(2020年10月10日):样式可提供更好的概述。

解决方法

试图访问localhost:8080 / TEST / API / 1.0.0 / getMyConfigurations上的路径,该路径在1.5.33.RELEASE版本中起作用。

在高于2.x.x.RELEASE的版本中,似乎会忽略application.properties上的server.contextPath属性。因此事实证明,必须在不使用server.contextPath(localhost:8080 / getMyConfigurations)的情况下调用该路径。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。