it-swarm.com.de

@ResponseBody, ResponseEntity Spring-Objekt als JSON zurückgeben

Ich verwende Spring Version 4 (Spring Data). Ich möchte Object als JSON zurückgeben. Ich habe mich gefragt, dass der folgende Code auch ohne Anmerkung der Benutzerklasse mit XmlRootElement funktioniert:

@RequestMapping(value = "/resources/users", method = RequestMethod.GET)
public ResponseEntity<User> getUserByLogonId(OAuth2Authentication auth) {

    String userLogonId = ((org.springframework.security.core.userdetails.User) auth.getUserAuthentication()
            .getPrincipal()).getUsername();
    UsersServices usersServices = new UsersServicesImpl(usersOperations);
    User user = usersServices.findByLogonId(userLogonId);
    HttpStatus userStatus = HttpStatus.NOT_FOUND;
    if (user != null) {
        userStatus = HttpStatus.FOUND;
    }
    return new ResponseEntity<User>(user, userStatus);
}

kann jeder Körper erklären? ist ResponseBody/ResponseEntity die Arbeit selbst? wenn ich die Objektklasse kommentieren muss, die als JSON zurückgegeben werden soll.

5
Mohammad Karmi

@RestController selbst fügt @ResponseBody-Anmerkung hinzu. Sie können es in der Github-Ausgabe sehen

Sie können auch die offiziellen Spring-Tutorials überprüfen. Hier können Sie die folgenden Zeilen und Beispiele überprüfen:

Diese Controller-Methoden geben einfache POJOs zurück - Collection<Bookmark>, und Bookmark usw., außer in add. Wenn eine HTTP-Anforderung kommt herein, die eine Accept header-, Spring MVC-Schleife durch die .__ spezifiziert. HttpMessageConverter konfiguriert, bis eine gefunden wird, die konvertiert werden kann von den POJO-Domänenmodelltypen in den in .__ angegebenen Inhaltstyp. der Accept header, falls konfiguriert.

Sie können auch die folgenden Zeilen und Beispiele aus Offizielles Dokument verfolgen.

@RestController ist eine Stereotypanmerkung, die @ResponseBody .__ kombiniert. und @Controller. Mehr noch, es verleiht Ihrem .__ mehr Bedeutung. Controller und möglicherweise auch zusätzliche Semantik in zukünftigen Versionen des Rahmens.

Und, 

Wie bei @RequestBody und @ResponseBody verwendet Spring HttpMessageConverter zum Konvertieren von und zur Anforderung und Antwort Ströme.

1
sunkuet02

xmlRootElement wird zur Darstellung eines Objekts als XML-Element in einem XML-Dokument verwendet. XML hat nichts mit JSON zu tun.
Wenn Sie Ihre Klasse mit @RestController kommentieren, kombiniert sie @Controller für Klassen und @ResponseBody für jede Methode. Und dann konvertiert HttpMessageConverter von und zu den Anforderungs- und Antwort-Streams.
@ResponseEntity wird zur Erstellung einer http-Antwort mit benutzerdefinierten Parametern (Header, http-Code usw.) verwendet. Zum Beispiel: 

return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
1
Nikolay

Spring Boot verwendet die Jackson Json-Bibliotheken, um die Java-Objekte zu/von Json-Objekten zu sortieren und deren Zuordnung aufzuheben. _.No benötigt keine explizite Konfiguration.

0
Srinivas Seema