java - 如何在 Java Jersey Application 中使用查询参数?

标签 java jersey jax-rs

我正在学习教程并使用了 Stackoverflow 问题 here . 这是我的 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 代码中读取的参数。一旦我能够做到这一点,我将需要传递许多其他参数。请建议。谢谢!!

最佳答案

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

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

关于java - 如何在 Java Jersey Application 中使用查询参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41455544/

相关文章:

java - 如何通过java POI api从Excel工作表中删除所有公式?

java - Jersey 内容类型定制

internationalization - 我如何 i18n JAX-RS (Jersey) JAXB 注释响应

java - Jersey 2 过滤器在客户端请求过滤器中使用容器请求上下文

java - 使用 JAX-RS 中的 @QueryParam 和 @DefaultValue 时为 "Annotation type not applicable to this kind of declaration"

java - 如何在 JAX-RS 中管理状态?

java - 如果正文中传递的 id 不存在/无效,请更正 http 错误代码?

java - API 级别 19 的工具栏 setOnScrollChangeListener()

Java 文件从一台服务器复制到另一台服务器

java - 单击按钮外部区域时激活按钮(Java/Blackberry 应用程序)