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

smdnsysy  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(474)

我遵循一个教程,并在这里使用了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;
    }
}

以下是我从 Postman 那里得到的信息:

GET>> localhost/api/get?user=123

答案是:

{"auth":true}

服务器控制台:

Starting Crunchify's Embedded Jersey HTTPServer...

Started Crunchify's Embedded Jersey HTTPServer Successfully !!!
Data Received: ?user=123 | null
User Authenticated: true

我试过传递字符串、整数等,但都没用。uri信息打印正确,响应也很好。问题是我没有在java代码中读取参数。我将需要通过许多其他参数,一旦我能够得到这个去。请建议。谢谢!!

6qqygrtg

6qqygrtg1#

@queryparam(“用户”)int user
用户int的值应该是123
看到了吗https://www.mkyong.com/webservices/jax-rs/jax-rs-queryparam-example/

zhte4eai

zhte4eai2#

嗯,我认为您在java类型方面遇到了问题。
如果您的用户是 Integer 你应该把它传给我 String 首先如果你想和一个 String ( Integer.toString() 或者 String.valueof() ).
但是你传递参数的方式让我很困扰,我不确定你是否可以通过纯文本类型传递整数。

az31mfrm

az31mfrm3#

我觉得你太努力了。据我所知,如果调用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;
    }
}

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

相关问题