jersey post提交到 ContainerRequestFilter 而HttpServletRequest获取不到数据(转)

jersey post提交到 ContainerRequestFilter 而HttpServletRequest获取不到数据

问题:在serverfilter request获取不到post提交的参数,而get请求可以

@Provider public class ReqFilter implements ContainerRequestFilter {

@Context HttpServletRequest request;

@Context private HttpServletResponse response;
@Override public void filter(ContainerRequestContext crc) throws IOException {

问题:在serverfilter request获取不到post提交的参数,而get请求可以

@Provider public class ReqFilter implements ContainerRequestFilter {

@Context HttpServletRequest request;

@Context private HttpServletResponse response;
@Override public void filter(ContainerRequestContext crc) throws IOException {

request.getParameter("name"); // 前端如果通过get提交可以获取,而通过post提交永远获取不到name

}

}

答案一:通过请求流,获取请求参数

@Override
public void filter(ContainerRequestContext crc) throws IOException {

String requestStr = this.inputStreamToString(crc.getEntityStream());

  String[] arrs = requestStr.split("&");            for (String strs : arrs) {                  String[] strs2 = strs.split("=");                  for (int i = 0; i < strs2.length; i++) {                        if (strs2[0].equals("name")) {                               if (strs2[1] != null &&!strs2[1].equals("")) {                                     System.out.println("test=" + strs2[1]);                               }                        }                  }           }

}

public String inputStreamToString(InputStream in) throws IOException {
StringBuffer out = new StringBuffer();
byte[] b = new byte[4096];
for (int n; (n = in.read(b)) != -1;) {
out.append(new String(b, 0, n));
}
return out.toString();
}

以上方案简介获取到name这个请求参数的值

答案二:通过过滤器,获取请求参数

public class MyFilter implements Filter{

@Override public void init(FilterConfig fc) throws ServletException { }
@Override public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc) throws IOException, ServletException { System.out.println("test=" + sr.getParameter("agentId")); fc.doFilter(sr, sr1); }
@Override public void destroy() { } }

该适配器一定要配置在org.glassfish.jersey.servlet.ServletContainer前面即可

总结:jersey和servlet 中request各自封装不一样,建议servlet request进行参数的处理,而jersey request可以进行头部处理,把两者结合起来

时间: 2024-11-06 07:44:31

jersey post提交到 ContainerRequestFilter 而HttpServletRequest获取不到数据(转)的相关文章

form enctype:&quot;multipart/form-data&quot;,method:&quot;post&quot; 提交表单,后台获取不到数据

在解决博问node.js接受参数的时候,发现当form中添加enctype:"multipart/form-data",后台确实获取不到数据,于是跑到百度上查了一下,终于明白为什么了,下面转载一下原因吧: 1.get方式 get方式提交的话,表单项都保存在http header中,格式是 http://localhost:8080/hello.do?name1=value1&name2=value2这样的字符串.server端通过request.getParameter是可以取

multipart/form-data post 方法提交表单,后台获取不到数据

这个和servlet容器有关系,比如tomcat等. 1.get方式 get方式提交的话,表单项都保存在http header中,格式是 http://localhost:8080/hello.do?name1=value1&name2=value2这样的字符串.server端通过request.getParameter是可以取到值的. 2.post方式(enctype为缺省的application/x-www-form-urlencoded) 表单数据都保存在http的正文部分,格式类似于下面

KindEditor提交用jquery获取不到数据的解决方法

http://www.douban.com/note/257795704/ 如果说用php接收的话,在HTML中这样写就可以了var editor;KindEditor.ready(function(K) {  editor = K.create('#editor_id');如果是用ajax方式提交的话,这样是获取不到数据的,最关键的是数据不同步在html页面中的javascript程序要这样写<script type="text/javascript">   KindEd

TinyMCE 提交 AjaxForm 获取不到数据的问题

在没有使用AjaxForm前,我做的一个小小的评论提交的Web form,评论内容使用了TinyMCE做文本编辑.为了增加一点点的用户体验,就顺手拿AjaxForm来实现Ajax提交.可是发现出现了一个意外的事情.就是每次提交,第一次提交时,AjaxForm会无法获得当前编辑的评论内容,即TextArea里面的内容,要再点击一次提交,才能将TextArea的内容提交上去. 关键是TinyMCE上的内容没有在提交前更新到TextArea中.于是想看看AjaxForm是否有在提交前的事件绑定,发现在

从HttpServletRequest获取POST数据的代码

我们经常需要从HttpServletRequest对象获取POST请求的数据,下面给出简练的代码共大家参考 StringBuffer jb = new StringBuffer(); String line = null; try { BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) jb.append(line); } catch (Exception e) { /*r

springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据

springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据 表单html: <form class="form-horizontal form-material" th:object="${user}" th:action="@{/user/updateOneUserInfo}" method="post"> <input type="hidden

controller获取客户端请求数据

在学习SpringMVC之前,客户端的请求数据一般是靠request的getParameter方法获取,获取到的数据类型为String类型,需要强制转换为需要的数据类型. 在controller中也可以用这种方式获取客户端数据. //浏览器访问路径为http://127.0.0.1:8001/web02/request?name=name @RequestMapping(path = "/request", method = RequestMethod.GET) public Mode

JSP简单练习-用Servlet获取表单数据

// javaBean代码 package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class AcceptUserRegist extends HttpServlet { public String codeToString(String str) // 处理中文字符串的函数 { String s=str; try { byte tempB[]=s.getByt

怎么获取表单数据

import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpS