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

为什么两个Jerseyendpoint都被击中?

焦苏燕
2023-03-14

当我转到<代码>/银行/1我看到了预期的账户信息。很好,很好。

当我转到<代码>/银行/1/description我看到了描述(好),但我也看到了帐户信息(不好)。

我习惯了Spring的GetMap,如果多个路径匹配,事情就会中断——但即便如此,AFAIK,在我的代码中,无论如何只有一个应该匹配?


银行。Java语言

Path("/bank")
public class Bank {

    @Context
    UriInfo uriInfo;

    @Context
    Request request;

    // ... Other irrelevant constructors, methods, and attributes

    @GET
    @Path("{acct}")
    public AccountAction getAccount(@PathParam("acct") String id) {
        LOGGER.log(Level.INFO, "- URL: " + uriInfo.getPath());
        return new AccountAction(uriInfo, request, id, accounts);
    }

    @GET
    @Path("{acct}/description")
    public AccountAction getDescription(@PathParam("acct") String id) {
        LOGGER.log(Level.INFO, "- URL: " + uriInfo.getPath());
        return new AccountAction(uriInfo, request, id, accounts);
    }
}


帐户ction.java

public class AccountAction {

    @Context
    UriInfo uriInfo;

    @Context
    Request request;

    // ... Other irrelevant constructors, methods, and attributes

    public AccountAction(UriInfo uriInfo, Request request, String id, AccountStore accounts) {
        this.uriInfo = uriInfo;
        this.request = request;
        this.id = new Integer(id);
        this.accounts = accounts;
    }

    @GET
    @Path("/{id:\\d+}/description")
    @Produces(MediaType.TEXT_PLAIN)
    public String getDescription() {
        LOGGER.log(Level.INFO, "- URL: " + uriInfo.getPath());
        Account a = accounts.find(id);
        if (a == null) {
            throw new RuntimeException("No such account: " + id);
        }
        return a.getDescription();
    }

    @GET
    @Path("/{id:\\d+$}")
    @Produces(MediaType.APPLICATION_XML)
    public Account getAccount() {
        LOGGER.log(Level.INFO, "- URL: " + uriInfo.getPath());
        Account a = accounts.find(id);
        if (a == null) {
            throw new RuntimeException("No such account: " + id);
        }
        return a;
    }
}


日志输出:

17-Jan-2020 11:54:57.526 INFO [http-nio-8080-exec-1] edu...Bank.getDescription - URL: bank/1/description
17-Jan-2020 11:54:58.139 INFO [http-nio-8080-exec-1] edu...AccountAction.getAccount - URL: bank/1/description
17-Jan-2020 11:54:58.140 INFO [http-nio-8080-exec-1] edu...AccountAction.getDescription - URL: bank/1/description

共有1个答案

罗兴运
2023-03-14

替换此代码

@路径(“/{id:$d$}”)

通过

@路径("/{id:[0-9]*}")

 类似资料:
  • 问题内容: JSON规范说JSON是对象或数组。如果是物体, 对象结构表示为一对大括号,包围着零个或多个名称/值对(或成员)。 名称是一个字符串。 … 后来,规范说字符串用引号引起来。 为什么? 从而, 并不是 问题1 :为什么不允许名称/值对中的名称成为未加引号的标识符? 问题2 :使用Javascript进行评估时,上述两种表示形式在语义上有区别吗? 问题答案: 问题1:为什么不允许名称/值对

  • 我如何优雅地检查这个? 现在我的方式是

  • 问题内容: 我有一个带有Spring和Spring安全性的Web项目。我的web.xml: 在服务器日志中,我看到Spring上下文被加载了两次(Spring BeanDispatcherServletContextL。我该如何解决? 在本教程中,我看到如果提供了,则不需要。但是,如果我删除了初始化参数,则会出现错误:“ :无法打开资源 ”。Dispather Servlet在默认位置找到上下文配

  • 我创建了一个包含三个卷积层和两个完全连接层的卷积神经网络。我使用了tf。火车saver()保存变量。当我使用inspect\u checkpoint时。py检查保存在检查点文件中的变量。为什么每个层都保存了两个附加变量,如Adam\u 1和Adam?另外,什么是beta1\u电源和beta2\u电源?

  • 问题内容: 我有一个像这样呈现的React.js组件: 页面上有一些事件会更新,结果是经过渲染,这会将新的prop 发送到组件。 在此组件中,我正在侦听这样的更新: 该控制台行被渲染两次,这使UI两次闪烁,同时调用社交网络。 我总是可以做这样的事情: 但是感觉有点… 是否会出现双重消息?如果是这样,好奇为什么? 如果没有,找到并消除它的最佳方法是什么? 问题答案: 您的组件可能被渲染两次,因为在父

  • 问题内容: 我的活动课在这里: 和相机预览类在这里: 但是,当我测试该类时,似乎首先调用onResume(),然后在1或2秒后再次调用。因此,相机必须再次刷新。如果我根本没有onResume(),则摄像头预览稳定,但是如果我从主屏幕或其他某个应用再次切换到该应用,则会崩溃。我发现onPause()不会影响任何一个。我的代码正确吗?我应该添加/删除哪些内容以使其不会再次刷新并且在应用切换后仍然不会崩