假设我有以下 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/