Java 如何将消息从HttpServletResponse.sendError(状态,msg)传递给控制器?

Java 如何将消息从HttpServletResponse.sendError(状态,msg)传递给控制器?,java,spring,Java,Spring,这是当前的java(1.8)spring调用堆栈 拦截器 preHandle(HttpServletRequest请求,HttpServletResponse响应){ 响应。发送错误(403) } web.xml 403 /错误/禁止 误差控制器 @RequestMapping(value=“/error/probled”) 禁用公共模型和视图(){ //在web浏览器中显示固定消息“禁止” } 现在在拦截器中,我想发回定制的消息, preHandle(HttpServletRequest、

这是当前的java(1.8)spring调用堆栈

  • 拦截器

    preHandle(HttpServletRequest请求,HttpServletResponse响应){
    响应。发送错误(403)
    }

  • web.xml

    
    403
    /错误/禁止
    

  • 误差控制器

    @RequestMapping(value=“/error/probled”)
    禁用公共模型和视图(){
    //在web浏览器中显示固定消息“禁止”
    }

  • 现在在拦截器中,我想发回定制的消息,
    preHandle(HttpServletRequest、HttpServletResponse){
    response.senderro(403,“我的消息”)
    }

    控制器更改为

    `@RequestMapping(value="/error/forbidden")
    public ModelAndView forbidden (HttpServletRequest request, HttpServletResponse response)`
    
    问题是,当我调试控制器代码时,我还无法从response obj中找到“my msg”

    问题1:我这样做对吗


    问题2:如果是的话,“我的味精”在回复中的什么位置?如果没有,正确的方法是什么?

    如果您想通过拦截器的预处理方法发送自定义消息,请尝试下面的代码

    response.setStatus(403);
    response.getWriter().write("my msg");
    

    非常有趣,我确实在浏览器中看到了“my msg”,但它没有命中errorController(我问题中的步骤3)。好奇的是,还有什么方法可以命中errorController,并且“my msg”在响应对象中?我认为如果从Interceptor中的preHandle方法引发异常,它不会命中任何控制器。Thx,顺便问一下,我可以在响应中使用UTF-8字符串。getWriter().write()?