当前位置: 首页 > 知识库问答 >
问题:

API(Spring Boot-SwaggerHub生成)结果为404,尽管映射正确

慕冠宇
2023-03-14

我最近在使用SwaggerHub,并试图升级Spring启动版本(1.5.22。发布到2.3.3。RELEASE)中生成的Spring-Boot api,因为访问管理(KeyCloak)。

将Spring引导版本升级到2.0.1。RELEASE使用KeyCloak修复了这些问题,但会导致api的每个路径出现404错误。总之,没有路径可以访问,尽管根据日志映射。

版本问题:

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

2.0.0.发行版-2.0.9。发布:正在映射API路径,但没有访问权限-启动时KeyClope没有错误。

2.1.0.第2.3.3版。发布:API路径不会被映射-启动时KeyClope没有错误。

这是使用2.0.1的日志的一部分。发布:

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],methods=[GET],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],methods=[GET],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}],methods=[GET],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],methods=[GET],produces=[application/json]}" onto public org.springframework.http.ResponseEntity<java.util.List<io.swagger.model.RequestOverview>> io.swagger.api.GetRequestOverviewApiController.getRequestOverview()

代码示例:

/GetMyConfiguration-接口:

/**
 * 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", response = ModelConfiguration.class, responseContainer = "List"),
        @ApiResponse(code = 400, message = "bad input parameter") })
    @RequestMapping(value = "/getMyConfigurations",
        produces = { "application/json" }, 
        method = RequestMethod.GET)
    ResponseEntity<List<ModelConfiguration>> callConfiguration();

}

/GetMyConfiguration-控制器:

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

编辑(05.10.2020):样式更好的概述。

共有1个答案

岳允晨
2023-03-14

试图访问本地主机上的路径:8080/TEST/API/1.0.0/GetMyConfiguration,该配置在1.5.33版下运行。释放

似乎application.properties上的server.context路径属性在高于2. x. x的版本中被忽略。释放。因此,事实证明,必须在没有server.context路径(localhost:8080/getMyConfigurations)的情况下调用路径。

 类似资料:
  • 我正在尝试使用Eclipse为一个涉及Gazebo(一个流行的机器人模拟器)的项目进行开发。Gazebo提供了一个插件系统,允许与模拟器进行外部交互,并提供了一系列关于如何编写插件的教程。 在成功地学习了这些教程之后,我尝试将代码迁移到Eclipse,使用cmake-g“Eclipse cdt4-unix makefiles”[buildpath]生成一个Eclipse rpoject,然后将其导

  • ..循环引用解决方案来自这里:JAXB注释-如何使XmlIDRef元素列表具有id值作为属性而不是元素正文? 下面是我的解决方案: 这是需要(un)编组的类: 我还在其中添加了一些调试行:在ConnectionAdapter中,在unmarshal()方法中,它表示:“unmarshal:1”for the first room。在RoomModel中,在afterUnmarshal()处,它表示

  • 问题内容: 我已经检查了很多其他线程,因为它们无法使用Django中的静态文件应用程序提供静态内容,但尚未找到解决方案。 settings.py 模板 相关行… 日志 从日志看来,路径是正确的,但可惜它仍然会产生404。 问题答案: 对于本地提供的静态文件, 如果您尚未 设置任何形式的静态文件收集并且运行的是Django 1.3+,我相信这是您引用静态文件时应采用的方式 注意,我在这里省略了。这是

  • 几个小时以来,我一直在努力让MapStruct为JAXB生成的类生成有效的映射器。这些类的特殊性在于,它们既没有集合的setter,也没有集合的adder。例如: 类avove有一个getter和一个属性设置器(本例中为firstName),但对于集合(此处列出),它只有一个getter。因此,消费者有责任通过getAddressTypes(add(new AddressType(...))进行访

  • 我正在浏览Quarkus当前可用的指南 我说的是在不使用现有JPA实体的情况下,将SQL查询结果绑定到自定义pojo的可能性。我找到的所有示例都只从一个表中提取记录,从中提取出相同JPA实体的实例列表。然而,这不太可能是现实世界应用程序的常见用例。大多数情况下,我们必须处理不那么琐碎的查询,这些查询涉及来自不同表的字段的混合、连接或计算字段。 SQL ResultSet映射是一个方便的JPA功能,