猿问

ajax application/json传入后台,拦截器怎么获取参数且不破坏 @RequestBody正常接收?

如题:

  前端传入代码:
   
   $("#button").click(function(){
 var user = {"name":"张三","age":9,"key":"xx"};
$.ajax({
    url:"http://localhost:8080/mybatis/insert",    
    contentType : 'application/json',
    type : "POST",
    dataType: 'json',
    data: JSON.stringify(user),
    success : function(data) {
        alert(data.result);
    }
});

拦截器:

    @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse arg1, Object arg2) throws Exception {

    System.out.println("我拦截了");
    // 不能使用 request.getReader(); 和流的方式获取(流只能取一次,导致后台获取不到参数),request.getParameter();获取不到 json格式参数
    
    return true;
}

后台:

@RequestMapping("/insert")

public Map<String, Object> insert(@RequestBody User user){
    service.insert(user);
    Map<String, Object> result = new HashMap<>();
    result.put("result", "success");
    return result;
}

,请问谁有办法在不破坏后台:流和@RequestBody情况下,在拦截器里面获取我前台传入的key?

繁星淼淼
浏览 685回答 2
2回答

慕桂英3389331

RequestBody 和 ResponseBody 只能被读取一次,故而不要在 interceptor 中进行读取操作. 具体的解释和解决方法和移步这里Spring REST service: retrieving JSON from Request
随时随地看视频慕课网APP

相关分类

Java
我要回答