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

为“通用”路径映射springboot创建控制器

洪哲彦
2023-03-14

假设我有很多团队,比如:“团队A,团队B…团队Z”,每个团队至少有5个组件。现在我想创建一个通用控制器,它可以响应任何类型的请求/team/number,这样我就可以获得关于团队成员的信息。

例如,我的控制器必须能够映射此请求:

@RequestMapping(value = "/Team A/1", method = RequestMethod.GET) 

团队课程可以是:

@Entity
@Table(name = "team")
public class Team {

    public Team() {}

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private List<Player> players;

}

而且

Player :
    @Entity
    @Table(name = "player")
    public class Player {
    
        public Player() {}
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        private String name;
        private int number;
    
    }

显然它既可以执行GET也可以执行POST,重点是我不想为每个团队和每个数字指定一个控制器,我只想要一个可以响应/String/int的控制器。

我还需要指定它可以接受的字符串和值的范围(例如,最大值为5)。

共有1个答案

浦修文
2023-03-14

在这种情况下,@PathVariable-spring注释将对您有所帮助。

例如:

@RequestMapping(value = "{team}/{component}", method = RequestMethod.GET)
public Team getTeam(@PathVariable String team, @PathVariable int component) {
    //Use team and component here
}

如果其中一个变量是意外值,您只需在控制器方法中添加一些逻辑即可引发一些异常。

尽管这取决于您试图实现的目标,但这可能是一个糟糕的设计,因为此控制器方法将捕获所有匹配String/int的GET请求。您可能希望尝试以下操作,以使请求映射更加具体:

@RequestMapping(value = "team/{teamLetter}/{component}", method = RequestMethod.GET)
public Team getTeam(@PathVariable char teamLetter, @PathVariable int component) {
    //Use team and component here
}
 类似资料:
  • 问题内容: 如何创建可从所有控制器访问的某种utils捆绑包? 我的主模块中有以下路由代码: 我想是可以通用的功能,和。 我应该如何在AngularJS中做到这一点? 问题答案: 用角度定义通用代码的方法是通过服务。 您将像这样定义一个新服务: 在您的控制器中,您将注入此服务。 只需将CommonCode用作控制器函数的参数即可。Angular会为您注入它(请阅读Dependency Inject

  • 主要内容:Servlet 单一映射,Servlet 多重映射客户端通过 URL 地址来访问 Web 服务器中的资源,Servlet 程序若想被外界访问,就必须被映射到一个 URL 地址上。很多时候,该 URL 地址和 Servlet 程序的物理路径(在硬盘上的存储位置)并不一致,因此它被称为虚拟路径。Servlet 与虚拟路径的对应关系就叫做 Servlet 虚拟路径映射。 Servlet 虚拟路径映射可以被分为 2 类: 单一映射 多重映射 下面介绍如何

  • 本文向大家介绍JavaScript创建映射,包括了JavaScript创建映射的使用技巧和注意事项,需要的朋友参考一下 示例 映射是键到值的基本映射。映射与对象的不同之处在于,它们的键可以是任何东西(原始值和对象),而不仅仅是字符串和符号。Map上的迭代也总是按照将项目插入Map中的顺序进行,而在对象中的键上进行迭代时,顺序是不确定的。 要创建映射,请使用Map构造函数: 它具有一个可选参数,该参

  • 我想更新配置Azure存储挂载与Azure文件共享(路径映射)的Azure WebApp容器通过Azure运营模式管道。为此,我目前正在使用Azure PowerShell任务(代码如下)。但是,PowerShell脚本正在配置高级选项,并公开存储帐户访问密钥。有没有一种方法来配置'基本'之一。 PowerShell“New AzWebAppAzureStoragePath”创建“advance”

  • 我试图使用KeyCloak的管理API,以便向用户角色映射添加客户端级别的角色。为此,我使用管理endpoint: 不确定这里的问题是什么,因为该角色存在于系统中。这里会出什么问题?

  • 问题内容: 我已经为我的Jersey应用程序配置了。不幸的是,这给我的应用中的常规上传服务带来了一些麻烦。 如果有人上传,扩展名将被删除。 有没有办法告诉Jersey跳过对此资源的过滤? 编辑 :peeskillet的答案后,我的假设得到确认。我已经提出了改进请求:https : //java.net/jira/browse/JERSEY-2780 问题答案: 首先,这绝不是错误。这是预期的行为。