web-dev-qa-db-fra.com

Comment définir les valeurs d'en-tête de réponse dans la méthode de service de repos Spring Boot

Newbie question ... Je construis mon premier service reposant Spring Boot. Ma conception de service reposante nécessite que certaines données soient renvoyées dans l'en-tête de la réponse.

Comment définir les valeurs d'en-tête de réponse dans ma méthode de classe de contrôleur?

13
user2868835

De la documentation de printemps:

@RequestMapping("/handle")
public ResponseEntity<String> handle() {
    URI location = ...;
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.setLocation(location);
    responseHeaders.set("MyResponseHeader", "MyValue");
    return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}

Source: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/ResponseEntity.html

13
Matias Elorriaga

Contrairement à l'autre réponse, ne pas utiliser HttpServletResponse. Vous ne voulez pas travailler avec des API de servlet de bas niveau si vous pouvez l'éviter. Renvoie un ResponseEntity ou HttpEntity.

HttpHeaders headers = new HttpHeaders();
headers.add("1", "uno");

return new ResponseEntity<>(headers, HttpStatus.OK);
12
Abhijit Sarkar

Je cherchais une réponse et je n'aime pas avoir à créer une entité de réponse. J'ai trouvé la solution sur les forums de printemps, merci à l'auteur.

En bref, vous pouvez demander la réponse dans la déclaration de méthode afin de pouvoir la renseigner.

Un exemple simple:

@RequestMapping(value="/car/{carId}", method = RequestMethod.Get)
@ResponseBody
public Car getCarById(@PathVariable("carId") String Id, HttpServletResponse response) {

    response.setHeader("X-Special-Header", myCar.getEcoLabel());
    //get the car
    return myCar;
}

J'espère que cela aide les autres aussi.

http://forum.spring.io/forum/spring-projects/web-services/102652-setting-header-values-with-spring-rest-controller

7
Luc S.