有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java当您使用spring forward重定向到其他控制器时,如何从ModelAndView返回响应对象?

我有两个控制器类:

    @Controller
    @RequestMapping( "/controller" )
    public class Controller_Indirect{

        @RequestMapping( "/setContextIndirect" )
        public @ResponseBody ModelAndView setContextIndirect( HttpServletRequest request, @RequestParam Message message )
            throws Exception{
        BigMessage bigMessage = new BigMessage();
        bigMessage.setMessage( message );
        bigMessage.setMessageId( "Sample Message ID" );
        return new ModelAndView( "forward:/setContext", "BigMessage", bigMessage );
        }
    }

    @Controller
    @RequestMapping( "/controller2" )
    public class Controller_Direct{

        @RequestMapping( "/setContext" )
        public @ResponseBody JSONOutput setContextDirect( HttpServletRequest request, @RequestBody BigMessage bigMessage )
                throws Exception{
            JSONOutput jsonOutput = new JSONOutput();
            OutgoingMessage outgoingMessage = new OutgoingMessage();
            ..
            // Some code
            ..
            jsonOutput.setData( outgoingMessage );
            jsonOutput.setSuccess( true );
            return jsonOutput;
        }
    }

这里的JSONOutput有两个字段data和isSuccess。数据是方法调用-BigMessage返回的对象 因此,有可能调用这些控制器方法中的任何一个。直接方法返回JSONOutput对象,间接方法返回ModelAndView对象

我有什么办法可以做到这一点吗?(获得与直接方法相同的JSONOutput作为响应,然后我可以从间接方法返回该响应):

    @Controller
    @RequestMapping( "/controller" )
    public class Controller_Indirect{

        @RequestMapping( "/setContextIndirect" )
        public @ResponseBody JSONOutput setContextIndirect( HttpServletRequest request, @RequestBody Message message ){
        BigMessage bigMessage = new BigMessage();
        bigMessage.setMessage( message );
        bigMessage.setMessageId( "Sample Message ID" );
        JSONOutput jsonOutput = new JSONOutput();
        jsonOutput = (JSONOutput) new ModelAndView( "forward:/setContext", "BigMessage", bigMessage );
        // This JSONOutput should have the OutgoingMessage set as data field.
        return jsonOutput;
        }
    }

    @Controller
    @RequestMapping( "/controller2" )
    public class Controller_Direct{

        @RequestMapping( "/setContext" )
        public @ResponseBody JSONOutput setContextDirect( HttpServletRequest request, @RequestBody BigMessage bigMessage ){
            JSONOutput jsonOutput = new JSONOutput();
            OutgoingMessage outgoingMessage = new OutgoingMessage();
            ..
            // Some code
            ..
            jsonOutput.setData( outgoingMessage );
            jsonOutput.setSuccess( true );
            return jsonOutput;
        }
    }

目前,如果我这样做,BigMessage bigMessage = (BigMessage) modelAndView.getModel().get( "BigMessage" );,我会得到BigMessage作为模型对象

我需要这个是JSONOutput,它包含OutgoingMessage

任何想法都很好。提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    如果您想从同一个控制器同时获得modelAndViewjson输出,那么您可以移动到contentNegotiationViewResolver以获得结果