J'utilise Spring version 4 (données de printemps). Je souhaite renvoyer Object en JSON. Je me demandais si le code suivant fonctionnait même sans annoter la classe d'utilisateurs avec xmlRootElement:
@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);
}
n'importe quel corps peut-il expliquer? ResponseBody/ResponseEntity fait-il le travail lui-même? lorsque j’ai besoin d’annoter la classe d’objets à retourner en tant que JSON.
@RestController
ajoute lui-même l'annotation @ResponseBody
. Vous pouvez le voir dans Github Issue
Vous pouvez également consulter les tutoriels officiels de printemps . Ici vous pouvez vérifier les lignes et exemples ci-dessous:
Ces méthodes de contrôleur renvoient des POJO simples -
Collection<Bookmark>
, etBookmark
, etc., dans tous les cas sauf leadd
. Lorsqu'une requête HTTP entre qui spécifie unAccept header
,Spring MVC
parcourt le fichier configuréHttpMessageConverter
jusqu'à ce qu'il en trouve un qui peut convertir des types de modèle de domainePOJO
au type de contenu spécifié dans leAccept header
, si ainsi configuré.
Vous pouvez également suivre les lignes et exemples ci-dessous de Doc officiel
@RestController est une annotation de stéréotype qui combine @ResponseBody et @Controller. Plus que cela, cela donne plus de sens à votre Contrôleur et peut également porter une sémantique supplémentaire dans les prochaines versions du cadre.
Et,
Comme avec @RequestBody et @ResponseBody, Spring utilise HttpMessageConverter pour convertir depuis et vers la demande et la réponse ruisseaux.
xmlRootElement
utilise pour représenter un objet en tant qu'élément XML dans un document XML. XML n'a rien à voir avec JSON.
Lorsque vous annotez votre classe par @RestController
, il combine @Controller
pour la classe et @ResponseBody
pour chaque méthode. Ensuite, HttpMessageConverter
convertit les flux de demande et de réponse à partir de ceux-ci.@ResponseEntity
est utilisé pour former une réponse http avec des paramètres personnalisés (en-têtes, code http, etc.). Par exemple:
return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
Spring Boot utilise les bibliothèques jackson json pour organiser et désorganiser les objets Java de/vers les objets json.