如何在Java Jersey应用程序中使用查询参数?

Amr*_*ian 7 java jax-rs jersey

我正在按照教程进行操作,并在此处使用Stackoverflow问题.这是我的Java类:

package com.crunchify.tutorial;

import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Consumes;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
import org.json.simple.JSONObject;

@Path("api")
public class CrunchifyAPI {

    @SuppressWarnings("unchecked")
    @GET
    @Path("/get")
    @Consumes(MediaType.TEXT_PLAIN)
    public String get(
            @DefaultValue("111") @QueryParam("user") int user,
            @Context UriInfo uriInfo
            ) {
        MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
        String nameParam = queryParams.getFirst("user");
        System.out.println("Data Received: " + uriInfo.getRequestUri().getQuery()
                + " | " + nameParam);
        JSONObject obj = new JSONObject();
        obj.put("auth", true);
        String ret = JSONObject.toJSONString(obj);
        return ret;
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我从邮递员那里得到的信息:

GET>> localhost/api/get?user=123
Run Code Online (Sandbox Code Playgroud)

回应是:

{"auth":true}
Run Code Online (Sandbox Code Playgroud)

Server console:

Starting Crunchify's Embedded Jersey HTTPServer...

Started Crunchify's Embedded Jersey HTTPServer Successfully !!!
Data Received: ?user=123 | null
User Authenticated: true
Run Code Online (Sandbox Code Playgroud)

我尝试过传递String,Integer等但没有任何作用.uri Info正确打印,回复也很好.问题是我没有在Java代码中读取参数.一旦我能够实现这一目标,我将需要传递许多其他参数.请建议.谢谢!!

Nie*_*svh 5

我觉得你太努力了。据我所知,如果您调用 localhost/api/get?user=123,执行以下操作应该可以得到您想要的结果:

package com.crunchify.tutorial;

import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Consumes;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
import org.json.simple.JSONObject;

@Path("api")
public class CrunchifyAPI {

    @SuppressWarnings("unchecked")
    @GET
    @Path("/get")
    @Consumes(MediaType.TEXT_PLAIN)
    public String get(
            @DefaultValue("111") @QueryParam("user") Integer user,
            @Context UriInfo uriInfo
            ) {
        System.out.println("Data Received: " + uriInfo.getRequestUri().getQuery()
                + " | " + name);
        JSONObject obj = new JSONObject();
        obj.put("auth", true);
        String ret = JSONObject.toJSONString(obj);
        return ret;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您只需要用户参数中传递的信息,则不需要查询字符串的所有额外内容。


Kal*_*oni 1

@QueryParam("user") int 用户

该 user int 的值应该是 123

请参阅https://www.mkyong.com/webservices/jax-rs/jax-rs-queryparam-example/