Mik*_*ike 11 jersey jersey-2.0
在Jersey 1.x中,您可以使用ContainerRequest.getFormParameters()对表单数据执行请求筛选,但我没有在Jersey 2.x中看到明显的等效项.我已经实现了ContainerRequestFilter界面,让我可以访问a ContainerRequestContext,但从那里如何获取表单数据?
泽西岛1.x例子:
public class MyFilter implements ContainerRequestFilter {
public ContainerRequest filter(ContainerRequest request) {
Form f = request.getFormParameters();
// examine form data and filter as needed
}
}
Run Code Online (Sandbox Code Playgroud)
泽西岛2.x例子:
public class MyFilter implements ContainerRequestFilter {
public void filter(ContainerRequestContext context) {
// how do I get to the Form data now?
}
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*ike 18
经过大量的搜索和反复试验后,我找到了一种在Jersey 2中执行此操作的合适方法.您必须手动使用请求实体主体,但是必须小心谨慎地执行此操作以防止后续过滤器和资源也消耗它.下面是一个将实体读入Form对象的简单示例:
@Provider
public class FormDataFilter implements ContainerRequestFilter
{
@Override
public void filter(ContainerRequestContext requestContext) throws IOException
{
if (requestContext instanceof ContainerRequest)
{
ContainerRequest request = (ContainerRequest) requestContext;
if ( requestContext.hasEntity()
&& MediaTypes.typeEqual(MediaType.APPLICATION_FORM_URLENCODED_TYPE,request.getMediaType()))
{
request.bufferEntity();
Form f = request.readEntity(Form.class);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
关键是调用bufferEntity().如果没有这个,实体将被标记为已关闭,并在任何后续读取尝试中导致IllegalStateExceptions.
| 归档时间: |
|
| 查看次数: |
7810 次 |
| 最近记录: |