2017-05-29 1 views
0

Ich habe zwei Klassen Controller:Wie geben Sie das Antwortobjekt von ModelAndView zurück, wenn Sie die Feder weiterleiten, um zu einem anderen Controller umzuleiten?

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

Die hier JSONOutput hat zwei Felder Daten und isSuccess. data ist ein Objekt, das vom Methodenaufruf zurückgegeben wird - BigMessage Es besteht also die Möglichkeit, eine dieser Controller-Methoden aufzurufen. Die direkte Methode gibt ein JSONOutput-Objekt zurück und die indirekte Methode gibt ein ModelAndView-Objekt zurück.

Gibt es eine Möglichkeit, dass ich das tun kann? (Sie erhalten die gleiche JSONOutput als Antwort von der direkten Methode, die ich dann von der indirekten Methode zurückkehren kann):

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

Derzeit wenn ich das tue, BigMessage bigMessage = (BigMessage) modelAndView.getModel().get("BigMessage");, ich BigMessage als Modellobjekt erhalten.

Ich brauche dies JSONOutput, die OutgoingMessage enthält.

Alle Ideen wären großartig. Danke im Voraus.

Antwort

0

möchten Sie beide modelAndView und json Ausgabe von demselben Controller erhalten, dann könnten Sie zu contentNegotiationViewResolver bewegen, um das Ergebnis zu erhalten.

+0

Ich brauche nicht beide. Ich brauche nur das JSONOutput-Objekt zurückgegeben. – ybbs

+0

Wie möchten Sie die json-Ausgabe in 'modelandview'-Controller erhalten –

+0

Es wäre nicht der eigentliche JSON. Es wäre ein Java-Objekt namens 'JSONOutput'. Nennen wir es einfach "Output". Dies wird zwei Felder haben ('Objektdaten, Boolean isSuccess'). Daten sollten als 'OutgoingMessage' eingestellt und als 'Output' des Controllers zurückgegeben werden – ybbs

Verwandte Themen