2017-01-18 1 views
2

Ich tat a lesson über Spring Boot und es funktioniert perfekt. Aber was, wenn ich eine Reihe von Objekten zurückgeben möchte? Ich habe versucht, this zu tun, aber es funktioniert nicht. Wie kann ich es richtig machen?Wie man eine Reihe von Objekten mit Spring Boot zurückgibt?

Mit einem Objekt (es funktioniert):

@RequestMapping("/greeting") 
public Greeting greeting(@RequestParam(value="name", defaultValue = "World") String name) { 
    return new Greeting(counter.incrementAndGet(), 
      String.format(template, name)); 
} 

mit vielen Objekten (es funktioniert nicht):

@RequestMapping(value = "/greeting", method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) 
public @ResponseBody List<Greeting> greeting() { 
    Greeting greeting1 = new Greeting(1, "One"); 
    Greeting greeting2 = new Greeting(2, "Two"); 
    List<Greeting> list = new ArrayList<>(); 
    list.add(greeting1); 
    list.add(greeting2); 
    return list; 
} 
+0

was nicht funktioniert? Kannst du es erklären oder Fehlermeldung geben, wenn es welche gibt – Patrick

Antwort

8

Wenn Sie Ihre ursprüngliche Methode, um Ihre neu ein (mit einem List) gemacht vergleichen, werden Sie feststellen, ein paar Unterschiede.

Zunächst einmal verwenden Sie innerhalb der @RequestMapping Annotation die Eigenschaften consumes und produces. produces ist hier kein Problem, weil Sie eine Antwort erzeugen, die JSON sein sollte. Allerdings Sie verbrauchen nichts, so sollten Sie die consumes weglassen.

@RequestMapping(value = "/greeting", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
public @ResponseBody 
List<Greeting> greeting() { 
    Greeting greeting1 = new Greeting(1, "One"); 
    Greeting greeting2 = new Greeting(2, "Two"); 
    List<Greeting> list = new ArrayList<>(); 
    list.add(greeting1); 
    list.add(greeting2); 
    return list; 
} 

Theoretisch kann man sogar die produces Eigenschaft entfernen als auch, weil Frühling Boot wird wissen, dass es JSON zu produzieren, da die Anwendung (vermutlich) Jackson auf seinem Classpath hat.

Sie können auch bemerken, dass Sie die @ResponseBody Annotation verwendet haben. Wenn Sie es hier einfügen, werden keine Fehler verursacht, aber es ist nicht notwendig, denn wenn Sie das Spring-Tutorial korrekt befolgt haben, sollten Sie Ihren Controller mit @RestController kommentiert haben und dadurch Spring bereits mitteilen, dass es einen Antworttext verwenden wird.

-1

Hier ist der Code-Schnipsel Ich habe das getan. Entfernen Sie den "Verbrauch" aus Ihrer @RequestMapping-Annotation, da Sie diese in Ihrer Methode nicht verwenden.

@RestController 
public class GreetingsController 
{ 
    @RequestMapping(value = "greetings", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
    public @ResponseBody 
    List<Greeting> greeting() { 
     Greeting greeting1 = new Greeting(1, "One"); 
     Greeting greeting2 = new Greeting(2, "Two"); 
     List<Greeting> list = new ArrayList<>(); 
     list.add(greeting1); 
     list.add(greeting2); 
     return list; 
    } 

    public class Greeting 
    { 
     private String message; 
     private int count; 

     public Greeting(int count, String message) 
     { 
      this.count = count; 
      this.message = message; 
     } 

     public String getMessage() 
     { 
      return message; 
     } 

     public void setMessage(String message) 
     { 
      this.message = message; 
     } 
    } 
} 

enter image description here

Verwandte Themen