Spring REST Concepts: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 16: Line 16:


The [[@RestController]] annotation implies [[@ResponseBody]], which maps the result produced by the handler method onto the body of the HTTP response.
The [[@RestController]] annotation implies [[@ResponseBody]], which maps the result produced by the handler method onto the body of the HTTP response.
If all goes well, the HTTP status code is 200, even if the method returns null.
If the method handler wants to control the HTTP status code, it has the option of wrapping the response in a <tt>ResponseEntity<></tt>, which, along the body, allows specifying the response code:
<syntaxhighlight lang='java'>
import org.springframework.http.ResponseEntity;
...
public ResponseEntity<A> get(...) {
  // if found ...
  return new ResponseEntity<>(a, HttpStatus.OK);
  // ... else
  return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
}
</syntaxhighlight>


=REST Clients=
=REST Clients=

Revision as of 19:51, 12 March 2019

Internal

Overview

The. Spring REST concepts page is an extension of the Spring MVC Concepts page. Spring MVC concepts are used and extended to provide REST support.

Annotations

Responses

The @RestController annotation implies @ResponseBody, which maps the result produced by the handler method onto the body of the HTTP response.

If all goes well, the HTTP status code is 200, even if the method returns null.

If the method handler wants to control the HTTP status code, it has the option of wrapping the response in a ResponseEntity<>, which, along the body, allows specifying the response code:

import org.springframework.http.ResponseEntity;
...
public ResponseEntity<A> get(...) {

  // if found ...
  return new ResponseEntity<>(a, HttpStatus.OK);

  // ... else
  return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
}

REST Clients

RestTemplate

TO PROCESS: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#webmvc-resttemplate

POSTing Resource. Data

This overloaded version allows you to receive the newly created resource as a domain model object:

RestTemplate restTemplate = new RestTemplate();

MyResource model = new MyResource(...);

MyResource created = restTemplate.postForObject("http://localhost:8080/myresource", model, MyResource.class);