2017-05-29 2 views
0

J'ai deux classes: contrôleurComment renvoyez-vous l'objet de réponse de ModelAndView lorsque vous utilisez spring forward pour rediriger vers un autre contrôleur?

@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; 
     } 
    } 

Le JSONOutput ici a deux champs de données et isSuccess. data est un objet renvoyé par l'appel de méthode - BigMessage Il est donc possible de faire un appel à l'une de ces méthodes de contrôleur. La méthode directe renvoie un objet JSONOutput et la méthode indirecte renvoie un objet ModelAndView.

Y at-il un moyen de le faire? (Obtenir le même JSONOutput une réponse de la méthode directe que je peux ensuite revenir à la méthode indirecte):

@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; 
     } 
    } 

Actuellement, si je fais ça, BigMessage bigMessage = (BigMessage) modelAndView.getModel().get("BigMessage");, je reçois BigMessage comme l'objet du modèle. J'ai besoin que ce soit JSONOutput, qui contient OutgoingMessage.

Toutes les idées seraient géniales. Merci d'avance.

Répondre

0

souhaitez-vous obtenir à la fois modelAndView et json en provenance du même contrôleur alors vous pouvez passer à contentNegotiationViewResolver en ordre pour obtenir le résultat.

+0

Je n'ai pas besoin des deux. J'ai juste besoin de l'objet JSONOutput retourné. – ybbs

+0

Comment voulez-vous recevoir la sortie json dans le contrôleur 'modelandview' –

+0

Ce ne serait pas le JSON réel. Ce serait un objet Java appelé 'JSONOutput'. Appelons simplement 'Output' pour le moment. Cela aura deux champs ('Object data, boolean isSuccess'). Les données doivent être définies comme 'OutgoingMessage' et retournées en tant que Controller' Output' – ybbs