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 楼答案
如果您想从同一个控制器同时获得
modelAndView
和json
输出,那么您可以移动到contentNegotiationViewResolver
以获得结果