gpt4 book ai didi

java - ReSTLet 路径参数不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:57:36 24 4
gpt4 key购买 nike

下面是我的路线

public Restlet createInboundRoot(){
Router router = new Router(getContext());
router.attach("account/profile",UserProfile.class);

下面是资源类UserProfile.java

@post
@path("add")
public void addUser(User user){

@post
@path("modify")
public void modifyUser(User user){

@post
public void test(){//only this is called

我想调用一个资源类并为资源类执行几个相同的功能。这意味着,我上面的资源类处理与 UserProfiles 相关的功能,例如添加、修改。网址是:
account/profile/add => 添加用户
account/profile/modify => 修改用户

无论如何,上面我的实现不起作用,因为只能通过 account/profile/调用 test() 方法

我也尝试使用 Pathparams。但它也没有用。对于路径参数:

router.attach("account/profile/{action}",UserProfile.class);

被添加到资源类中,

@post
@path("{action}")
public void addUser(@pathparam("action") String action, User user){

任何人都可以告诉我我的问题在哪里。

最佳答案

您附加UserProfile 服务器资源的方式有点奇怪。我认为您混合了 ReSTLet 的 native 路由和 JAXRS 扩展中的路由。

我针对您的用例进行了一些测试,并且能够获得您期望的行为。我用的是ReSTLet 2.3.5版本。

这是我做的:

  • 由于要使用 JAXRS,因此需要创建一个 JaxRsApplication 并将其附加到组件上:

    Component component = new Component();
    component.getServers().add(Protocol.HTTP, 8182);

    // JAXRS application
    JaxRsApplication application
    = new JaxRsApplication(component.getContext());
    application.add(new MyApplication());

    // Attachment
    component.getDefaultHost().attachDefault(application);

    // Start
    component.start();
  • 该应用程序仅列出您要使用的服务器资源,但不定义路由和路径:

    import javax.ws.rs.core.Application;

    public class MyApplication extends Application {
    public Set<Class<?>> getClasses() {
    Set<Class<?>> rrcs = new HashSet<Class<?>>();
    rrcs.add(AccountProfileServerResource.class);
    return rrcs;
    }
    }
  • 服务器资源定义处理方法和相关路由:

    import javax.ws.rs.POST;
    import javax.ws.rs.Path;

    @Path("account/profile/")
    public class AccountProfileServerResource {
    @POST
    @Path("add")
    public User addUser(User user) {
    System.out.println(">> addUser");
    return user;
    }

    @POST
    @Path("modify")
    public User modifyUser(User user) {
    System.out.println(">> modifyUser");
    return user;
    }

    @POST
    public void test() {
    System.out.println(">> test");
    }
    }
  • 当我调用不同的路径时,会调用正确的方法:

    • http://localhost:8182/account/profile/modify:调用modifyUser方法
    • http://localhost:8182/account/profile/add: addUser 方法被调用
    • http://localhost:8182/account/profile/:调用了test方法

希望对你有帮助,蒂埃里

关于java - ReSTLet 路径参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34767194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com