2017-05-29 68 views
0

我有兩個控制器類:當您使用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這裏有兩個字段的數據和isSuccess。數據是由方法調用返回的對象 - BigMessage 因此有可能調用這些Controller方法中的任何一個。直接方法返回一個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

任何想法都會很棒。提前致謝。

回答

0

您想同時獲得modelAndViewjson輸出嗎?那麼您可以移動到contentNegotiationViewResolver以獲得結果。

+0

我不需要他們兩個。我只需要返回JSONOutput對象。 – ybbs

+0

您希望如何在'modelandview'控制器中接收json輸出 –

+0

這不是實際的JSON。這將是一個名爲'JSONOutput'的Java對象。現在讓我們把它叫做輸出。這將有兩個字段('Object data,boolean isSuccess')。數據應該設置爲'OutgoingMessage'並作爲Controller'Output'返回 – ybbs

相關問題