You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过FacesContext获取POST提交的原始JSON数据

获取JSF应用中text/plain格式的原始请求体

你用getRequestParameterMap()拿不到数据是正常的——这个Map仅解析application/x-www-form-urlencoded这类表单编码的参数,而你提交的是text/plain格式的原始JSON,没有关联参数名,所以不会被解析到参数Map里。要获取这份原始数据,需要直接读取HTTP请求的输入流。

实现代码

通过ExternalContext获取底层的HttpServletRequest,然后读取输入流即可:

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;

public String fetchRawJsonPayload() throws IOException {
    FacesContext ctx = FacesContext.getCurrentInstance();
    HttpServletRequest request = (HttpServletRequest) ctx.getExternalContext().getRequest();
    
    // 匹配请求的字符编码,避免乱码
    request.setCharacterEncoding("UTF-8");
    
    BufferedReader reader = request.getReader();
    StringBuilder payload = new StringBuilder();
    String line;
    
    while ((line = reader.readLine()) != null) {
        payload.append(line);
    }
    
    return payload.toString();
}

注意点

  • 字符编码要和请求保持一致,比如你的JSON用UTF-8发送,就设置UTF-8,防止出现乱码。
  • 请求输入流只能读取一次,如果应用里有过滤器或其他组件已经读取过流,需要用HttpServletRequestWrapper包装请求,缓存流内容来支持重复读取。
  • JSF 2.3+的@RequestParameter注解仅适用于表单参数,对你的场景不适用,直接读流是最稳妥的方案。

内容的提问来源于stack exchange,提问作者Kash.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:17:35