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.
@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>
, undBookmark
usw., außer inadd
. Wenn eine HTTP-Anforderung kommt herein, die eineAccept header
-,Spring MVC
-Schleife durch die .__ spezifiziert.HttpMessageConverter
konfiguriert, bis eine gefunden wird, die konvertiert werden kann von denPOJO
-Domänenmodelltypen in den in .__ angegebenen Inhaltstyp. derAccept 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.
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);
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.