gpt4 book ai didi

jersey - 根据表单数据过滤 Jersey 请求

转载 作者:行者123 更新时间:2023-12-04 01:39:45 28 4
gpt4 key购买 nike

在 Jersey 1.x 中,您可以使用 ContainerRequest.getFormParameters()对表单数据进行请求过滤,但我在 Jersey 2.x 中看不到明显的等价物。我已经实现了 ContainerRequestFilter让我可以访问 ContainerRequestContext 的界面,但是从那里如何获取表单数据呢?

Jersey 1.x 示例:

public class MyFilter implements ContainerRequestFilter {
public ContainerRequest filter(ContainerRequest request) {
Form f = request.getFormParameters();

// examine form data and filter as needed
}
}

泽西 2.x 示例:
public class MyFilter implements ContainerRequestFilter {
public void filter(ContainerRequestContext context) {
// how do I get to the Form data now?
}
}

最佳答案

经过大量的搜索和反复试验,我在 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);
}
}
}
}

关键是调用bufferEntity()。如果没有这个,实体将被标记为已关闭,并在任何后续读取尝试中导致 IllegalStateExceptions。

关于jersey - 根据表单数据过滤 Jersey 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25557892/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com