java - JAX-RS Web 服务如何只接受请求正文中发送的表单参数?

标签 java web-services jax-rs forms

假设我有以下 JAX-RS Web 服务:

public class HelloService {

    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.TEXT_PLAIN)
    public String getMessage(@FormParam("name") String name) {
        return "Hello, " + name + "!";
    }
}

此 Web 服务将接受表单参数,无论它们是在请求正文中发送还是在 URL 中发送(例如 http://foo.bar/baz?name=qux)。

有没有办法可以将 Web 服务配置为仅接受请求正文中发送的表单参数?

最佳答案

您可以尝试 ContainerRequestFilter ,如下:

@Provider
public class QueryParametersFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {

        String query = requestContext.getUriInfo().getRequestUri().getQuery();

        if (query != null && !query.isEmpty()) {
            requestContext.abortWith(
                Response.status(Status.BAD_REQUEST)
                        .entity("Parameters not allowed in the query string")
                        .build());
        }
    }
}

可以定制实现以满足您的需求。

重要提示:上面定义的过滤器是全局的,也就是说,将对所有资源方法执行。要将此过滤器绑定(bind)到一组方法,请检查此 answer .

<小时/>

对于动态绑定(bind),您还可以尝试 DynamicFeature .

关于java - JAX-RS Web 服务如何只接受请求正文中发送的表单参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36891412/

相关文章:

.net - 模拟 WCF 客户端代理的最佳方法

spring - 在命名空间内使用 Spring 配置文件

java - IntelliJ 无法识别 ARCH LINUX 上的 Java 8 注释

java - 在 JSP 中为表单操作使用相对路径

java - 有没有一种方法可以根据单选按钮单击通过代码传递文本值?

c# - 偶发性 WCF 服务激活错误并显示消息 - 访问 IIS 元数据库时出错

java - 如何更改jax ws webservice的8080端口?

java - 当我们在JAX-RS中直接获取http body时如何关闭Response对象?

java.lang.NoSuchMethodError : javax. ws.rs.ext.MessageBodyWriter.isWriteable 错误

java - 如何获取可填充到 ListView 的两个列表之间的公共(public)元素的 ArrayList。