gpt4 book ai didi

java - HttpServletRequest getParameterMap - 单独获取表单参数

转载 作者:行者123 更新时间:2023-12-01 18:46:40 24 4
gpt4 key购买 nike

HttpServletRequest 的

getParameterMap() 返回查询参数和发布的表单数据。

我可以从 UriInfo.getQueryParameters() 单独获取查询参数。

但是我需要将表单参数单独作为类似于查询参数的MultivaluedMap,有没有办法获取它?

编辑:

很抱歉没有说清楚。我正在尝试获取过滤器/拦截器中的表单参数。

最佳答案

您可以将MultivaluedMap作为资源方法中的参数。这将是请求的正文。 JAX-RS 将为您将所有参数放入映射中。

@POST
@Consumes("application/x-www-form-urlencoded")
public Response post(@Context UriInfo uriInfo, MultivaluedMap params) {}

更新(编辑后的帖子)

因此,如果您想获取过滤器中的参数,可以从ContainerRequestContext中获取正文。使用 Jersey,您可以将 ContainerRequestContext 转换为 Jersey 的 ContainerRequest,而不是使用 context.getEntityStream() 获取 InputStream > 实现。这将使您能够访问 bufferEntity()readEntity() 方法。这些方法将让您轻松获取表单参数。您需要缓冲该实体,以便稍后需要将其传递给您的资源方法时读取它。

@Provider
public class MyFilter implements ContainerRequestFilter {

@Override
public void filter(ContainerRequestContext context) throws IOException {
if (MediaTypes.typeEqual(MediaType.APPLICATION_FORM_URLENCODED_TYPE, context.getMediaType())) { {
return;
}
ContainerRequest request = (ContainerRequest) context;
request.bufferEntity();
Form form = request.readEntity(Form.class);
MultivaluedMap params<String, String> = form.asMap();
MultivaluedMap<String, String> query = context.getUriInfo().getQueryParameters();
}
}

如果您只想将过滤器与特定资源方法一起使用,则可以使用 Name BindingDynamic Binding .

如果由于某种原因 readEntity() 返回一个空 map (我很少看到有人遇到此问题),您可以尝试检索 Form通过内部属性

Object formProperty = request.getProperty(InternalServerProperties.FORM_DECODED_PROPERTY);
if (formProperty != null) {
Form for = (Form) formProperty;
}

关于java - HttpServletRequest getParameterMap - 单独获取表单参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59823476/

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