JACKSON :
Permet de convertir des objets JSON en Map Java et les tableaux JSON en List Java.
Permet aussi de convertir directement un objet Json en bean Java.
Remarque : les bean java doivent matcher la structure du json.
JSONObjectException est sous type de IOException
Vous pouvez cependant, influencer la manière dont le JSON est produit en appliquant les annotations de mapping de Jackson sur le type Java. Cela vous donne plus de contrôle sur le JSON obtenue et évite les changements susceptibles de casser votre API et ses clients.
Databinding
ObjectMapper
ObjectWriter
Annotations :
https://stackoverflow.com/questions/671118/what-exactly-is-restful-programming
Les actions dans REST sont représenté par les méthodes du protocole HTTP, qui permettent de faire le Mapping entre les méthodes HTTP et les verbes CRUD:
Dans certain cas on peut utiliser POST pour faire un Update et PUT pour faire un Create.
ContentNegotiatingViewResolver
@ResponseBody
@RequestBody
RestTemplate : permet au applications Spring de consommer des ressources REST.
https://docs.spring.io/spring/docs/4.3.12.RELEASE/spring-framework-reference/htmlsingle/#rest-resttemplate
@Configuration
@EnableAutoConfiguration : est une composition des annotations @Configuration, d’un jeu d’annotations @Conditional qui configure en fonction des annotations @ConditionalOnClass et @ConditionalOnMissing et qui tient compte des classes trouvées dans le classpath.
SpringBootServletInitializer
Permet de convertir des objets JSON en Map Java et les tableaux JSON en List Java.
Permet aussi de convertir directement un objet Json en bean Java.
Remarque : les bean java doivent matcher la structure du json.
JSONObjectException est sous type de IOException
Vous pouvez cependant, influencer la manière dont le JSON est produit en appliquant les annotations de mapping de Jackson sur le type Java. Cela vous donne plus de contrôle sur le JSON obtenue et évite les changements susceptibles de casser votre API et ses clients.
Databinding
ObjectMapper
ObjectWriter
Annotations :
@JsonValue : annotation utilisé au niveau d'une méthode. Qui permet de générer une String JSON à partir d'un objet Java. --> équivalent à toString, permet de définir la manière dont l'objet sera sérialisé.
Representational State Transfer (REST) : consiste à transférer l'état des ressources entre un client et un serveur. On est concentrer sur l’état plutôt que sur les actions.
https://stackoverflow.com/questions/671118/what-exactly-is-restful-programming
- Representational —REST resources can be represented in virtually any form, including XML, JavaScript Object Notation (JSON), or even HTML
- State —When working with REST, you’re more concerned with the state of a resource than with the actions you can take against resources.
- Transfer —REST involves transferring resource data, in some representational form, from one application to another.
Les actions dans REST sont représenté par les méthodes du protocole HTTP, qui permettent de faire le Mapping entre les méthodes HTTP et les verbes CRUD:
- Create <—> POST (de nature non-idempotent) ou PUT
- Read <—> GET (de nature idempotent), Read-Only, la réponse peut être mise dans le cache.
- Update<—> PUT ou PATCH (Mise à jour partiel)
- Delete <—> DELETE
Dans certain cas on peut utiliser POST pour faire un Update et PUT pour faire un Create.
Uniform Resource
Pagination REST:
https://developer.github.com/v3/#pagination
https://www.baeldung.com/rest-api-pagination-in-spring
https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-part-seven-pagination/
https://blog.philipphauer.de/restful-api-design-best-practices/
https://blog.octo.com/designer-une-api-rest/
https://www.baeldung.com/rest-api-pagination-in-spring
https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-part-seven-pagination/
https://blog.philipphauer.de/restful-api-design-best-practices/
https://blog.octo.com/designer-une-api-rest/
Support de REST par Spring 4:
@RestController Introduit depuis Spring 4, equivaut à @Controller + @ResponseBody
@PathVariable : permet de au contrôleur de traiter les URL paramétré.
Spring views et view resolvers peuvent faire le rendu d'un modèle de données (model Data) sous forme d'XML, JSON, ATOM et RSS.ContentNegotiatingViewResolver
@ResponseBody
@RequestBody
RestTemplate : permet au applications Spring de consommer des ressources REST.
https://docs.spring.io/spring/docs/4.3.12.RELEASE/spring-framework-reference/htmlsingle/#rest-resttemplate
Method | Description |
delete() | Performs an HTTP DELETE request on a resource at a specified URL |
exchange() | Executes a specified HTTP method against a URL, returning a ResponseEntity containing an object mapped from the response body |
execute() | Executes a specified HTTP method against a URL, returning an object mapped from the response body |
getForEntity() | Sends an HTTP GET request, returning a ResponseEntity containing an object mapped from the response body |
getForObject() | Sends an HTTP GET request, returning an object mapped from a response body |
headForHeaders() | Sends an HTTP HEAD request, returning the HTTP headers for the specified resource URL |
optionsForAllow() | Sends an HTTP OPTIONS request, returning the Allow header for the specified URL |
postForEntity() | POSTs data to a URL, returning a ResponseEntity containing an object mapped from the response body |
postForLocation() | POSTs data to a URL, returning the URL of the newly created resource |
postForObject() | POSTs data to a URL, returning an object mapped from the response body |
put() | PUTs resource data to the specified URL |
Communiquer les erreurs aux clients:
Quelques pistes :
- @ResponseStatus : permet de spécifier un code Status.
- ResponseEntity : Contrôle absolu de la réponse HTTP, peut contenir plusieurs méta-données dans la réponse à envoyer au client. ==> status code, headers, and body
- @ExceptionHandler : Gestion des exceptions
Exemple :
@RequestMapping(value="/{id}", method=RequestMethod.GET)
public ResponseEntity spittleById(@PathVariable long id) {
Spittle spittle = spittleRepository.findOne(id);
HttpStatus status = spittle != null ?
HttpStatus.OK : HttpStatus.NOT_FOUND;
return new ResponseEntity(spittle, status); // response headers +payload + status code
}
Post-Redirect-get :
Code status :
201 (Created) est non seulement 200 (OK)?
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
Exemple :
@RequestMapping(
method=RequestMethod.POST
consumes="application/json")
@ResponseStatus(HttpStatus.CREATED)
public Spittle saveSpittle(@RequestBody Spittle spittle) {
return spittleRepository.save(spittle);
}
Il ne suffit pas d'informer que le client que la ressource à été créer, mais il faut aussi envoyer l'URI de la ressource, avec UriComponentsBuilder :
https://stackoverflow.com/questions/3318912/what-is-the-preferred-way-to-specify-an-http-location-response-header-in-sprin/15898426#15898426
https://stackoverflow.com/questions/16232833/how-to-respond-with-http-400-error-in-a-spring-mvc-responsebody-method-returnin
https://stackoverflow.com/questions/16232833/how-to-respond-with-http-400-error-in-a-spring-mvc-responsebody-method-returnin
Setting du headers de la response lors de l'envoie du ResponseEntity:
Annotation Spring Boot:
@Configuration
@EnableAutoConfiguration : est une composition des annotations @Configuration, d’un jeu d’annotations @Conditional qui configure en fonction des annotations @ConditionalOnClass et @ConditionalOnMissing et qui tient compte des classes trouvées dans le classpath.
SpringBootServletInitializer
La configuration automatique des Beans Spring
spring-boot-autoconfigure-{version}.jar
L’autoconfiguration de Spring Boot
essaie de configurer d’elle-même l’application à partir
des dépendances des jars ajoutés.
Par exemple,
si H2 est dans le classpath et que nous n’avons configuré aucun
Bean de connexion à une base, alors une connexion en mode
H2 en mémoire sera autoconfigurée.
L’autoconfiguration est activée
si on ajoute une annotation @EnableAutoConfiguration ou @SpringBootApplication à une
de nos classes annotées avec @Configuration.
Il est possible de désactiver partiellement
l’autoconfiguration via du code :
- excludeName
- spring.autoconfigure.exclude
@Import
@ComponentScan pour déterminer le package à autoscanner
Ressources Web:
https://soat.developpez.com/tutoriels/spring/tester-api-rest-testcontext/
https://www.developpez.net/forums/blogs/473169-gugelhupf/b1125/java-restful-comparaison-entre-jax-rs-spring-mvc/
https://www.developpez.com/actu/134958/Java-apprendre-a-utiliser-la-classe-Optional-lt-T-gt-pour-eviter-d-utiliser-explicitement-null-par-Gugelhupf/
https://github.com/in28minutes
Pagination :
Ressources Web:
https://soat.developpez.com/tutoriels/spring/tester-api-rest-testcontext/
https://www.developpez.net/forums/blogs/473169-gugelhupf/b1125/java-restful-comparaison-entre-jax-rs-spring-mvc/
https://www.developpez.com/actu/134958/Java-apprendre-a-utiliser-la-classe-Optional-lt-T-gt-pour-eviter-d-utiliser-explicitement-null-par-Gugelhupf/
https://github.com/in28minutes
Aucun commentaire:
Enregistrer un commentaire
to criticize, to improve