dimanche 5 août 2018

Notes Serialisation des objets avec Jakson, Spring MVC RESt, Spring Boot

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 :

@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:


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
}
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 :

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

Aucun commentaire:

Enregistrer un commentaire

to criticize, to improve