捕获java中的get请求

捕获java中的get请求,java,jakarta-ee,java-ee-7,Java,Jakarta Ee,Java Ee 7,假设我有一个HTML页面,在java上运行后端,我想进行简单的ajax请求调用 e、 g 在我的java服务器上 @Path('testResponse') public class NewClass { private String name = "MyName"; private String age = "MyAge"; @GET public String getName(){ return this.name; } @GE

假设我有一个HTML页面,在java上运行后端,我想进行简单的ajax请求调用

e、 g

在我的java服务器上

@Path('testResponse')
public class NewClass {
    private String name = "MyName";
    private String age = "MyAge";
    @GET
    public String getName(){
        return this.name;
    }
    @GET
    public String getAge(){
        return this.age;
    }
}
所以基本上有get-request-to/testResponse,路径注释指示哪个类应该捕获它,但是我如何选择调用哪个方法并返回数据呢?背后的逻辑是什么?我找不到关于它的任何东西

/////////////////////////////////

所以。我已经在netbeans中创建了新的web项目。它生成了html文件,我只向服务器添加了基本的ajax调用

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div>TODO write content</div>
        <script>
            fetch('/ajax_test/testResponse/name').then(function(x){
                alert(JSON.stringify(x));
            })
        </script>
    </body>
</html>

但它仍然是404,我错过了什么吗?再次感谢您的帮助

只需使用@Path进一步描绘端点即可。 因此,如果您想要“URL Prefix/testResponse/name”和“URL Prefix/testResponse/age”,请执行以下操作:

@Path("/testResponse")
public class NewClass {
    private String name = "MyName";
     private String age = "MyAge";
    @GET
    @Path("/name")
    public String getName(){
        return this.name;
    }
    @GET
    @Path("/age")
    public String getAge(){
        return this.age;
    }

如果我理解正确,那么当您点击
testResponse
时,您希望调用
GET
方法之一。您可以使用
@Path
对方法进行如下注释:

@Path("/")
public class NewClass {
    private String name = "MyName";
    private String age = "MyAge";

    @GET
    @Path("/testSomething")
    public String getName(){
        return this.name;
    }

    @GET
    @Path("/testResponse")
    public String getAge(){
        return this.age;
    }
}
@Path('testResponse')
public class NewClass {
    private String name = "MyName";
    private String age = "MyAge";

    @GET
    @Path("/name")
    public String getName(){
        return this.name;
    }

    @GET
    @Path("/age")
    public String getAge(){
        return this.age;
    }
}

在您的例子中,
getName()
将调用资源
/testResponse
第一个匹配方法及其注释。您可以添加其他注释来专门化您的方法:

  • @使用
    :为您的请求定义MIME媒体类型,如
    application/json
  • @产生
    :返回的数据具有什么MIME媒体类型。此属性对应于您发送的
    Accept
    标题
  • @Path
    :资源的进一步子路径
在您的情况下,将始终调用
getName()
,因为它是第一行,并且没有其他注释进一步区分这两种方法。另外,由于您使用的是REST资源,每个资源都必须有一个唯一的路径,因此您可以为
name
age
定义子资源,如下所示:

@Path("/")
public class NewClass {
    private String name = "MyName";
    private String age = "MyAge";

    @GET
    @Path("/testSomething")
    public String getName(){
        return this.name;
    }

    @GET
    @Path("/testResponse")
    public String getAge(){
        return this.age;
    }
}
@Path('testResponse')
public class NewClass {
    private String name = "MyName";
    private String age = "MyAge";

    @GET
    @Path("/name")
    public String getName(){
        return this.name;
    }

    @GET
    @Path("/age")
    public String getAge(){
        return this.age;
    }
}
您的资源可以在
/testResponse/name
/testResponse/age
上找到

看看下面的例子。在这里,这两个方法共享相同的路径,即
/testResponse
,但是要调用的实际方法是由您在Ajax请求中发送的
内容类型
头选择的。如果设置
内容类型:application/json
,将调用
getJsonName()
,类似地用于XML和
getXmlName()


您可以将其与上面提到的其他注释结合使用。要调用的方法总是第一个将资源路径和请求头属性与提供的注释相匹配的方法。

测试时会发生什么?你认为在这种情况下会发生什么?我只是不习惯有这样的方法。我习惯于捕捉get请求并使用route返回它。现在我有两个方法返回不同的值,并且在同一条路径上。这并不能回答我的任何问题。你应该了解我们什么时候在这些方法上使用@Path以及为什么使用@Path?查看此链接:我认为你错过了路径中的项目或servlet显示名称,请尝试
localhost:8080/display\u name\u GOES\u HERE/ajax\u test
。您可以在web-INF目录中的应用程序部署描述符文件
web.xml
中找到显示名称。我在该文件中找不到任何有帮助的内容抱歉,我混淆了这一点。为了澄清,您的路径始终如下所示:
http://host:port/context-根[/url模式]
。您不知道的是上下文根。查看以查找或更改它。我希望这会有所帮助。嗯,我的web.xml文件看起来完全不同。。我将创建一个新的问题,不要离题。您是否在
application.xml
glassfish web.xml
中查找了链接帖子中提到的
?它不应该只是“/ajax\u test/name”吗?
@Path('testResponse')
public class NewClass {
    private String name = "MyName";
    private String age = "MyAge";

    @GET
    @Consumes("application/json")
    public String getJsonName(){
        return this.name;
    }

    @GET
    @Consumes("application/xml")
    public String getXmlName(){
        return this.name;
    }
}