Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html)
SpringBoot REST 系列相关的文章:
Spring 有以下相关的注解:
## 定义相关
  |-- @Controller
  |-- @RestController
## 映射相关
  |-- @RequestMapping
  |-- @GetMapping
  |-- @PostMapping
  |-- @PathVariable
## 请求相关
  |-- @RequestBody
  |-- @RequestParam
  |-- @RequestHeader
  |-- @CookieValue
  |-- RequestEntity
## 定义相关
  |-- @ResponseBody
  |-- ResponseEntity@RestController 相当于 @ResponseBody 和 @Controller 的组合。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    @AliasFor(annotation = Controller.class)
    String value() default "";
}使用如下,可以省略 @ResponseBody 注解:
@RestController
public class HelloController {
    @RequestMapping("/v1/test")
    public String test1() {
        return "test";
    }
}// @PathVariable 解析请求路径中的参数
@RequestMapping("/v1/{city_id}/{user_id}")
public String test2(@PathVariable("city_id") String cityId, 
    @PathVariable(value = "user_id") String userId) {
    return cityId;
}// 1. @RequestParam 请求的参数
@GetMapping("/v1/test4")
public String test4(@RequestParam(name = "user_id", defaultValue = "2") String userId) {
    return userId;
}
// 2. @RequestHeader 请求头中的参数
@GetMapping("/v1/get_header")
public String test6(@RequestHeader("access_token") String token) {
    return token;
}
// 3. @RequestBody 请求可能是 json 或 xml
@GetMapping("/v1/test5")
public String test5(@RequestBody User user) {
    return user.getUsername();
}没有使用 @RestController 情况下返回 json 等格式需要使用 @ResponseBody 注解
@RequestMapping("/v1/test")
@ResponseBody
public String test1() {
    return "test";
}@GetMapping("/v1/entity")
public ResponseEntity<String> test8() {
    return ResponseEntity.ok("hello, world!");
}经常需要发送一个 GET/POST 请求到其他系统(REST API),通过 JDK 自带的 HttpURLConnection、Apache HttpClient、Netty 4、OkHTTP 2/3 都可以实现。
HttpClient 的使用:http://rensanning.iteye.com/blog/1550436
RestTemplate 的使用:https://rensanning.iteye.com/blog/2362105
Spring 的 RestTemplate 封装了这些库的实现,使用起来更简洁。
RestTemplate 包含以下几个部分:
HttpMessageConverter 对象转换器ClientHttpRequestFactory 默认是 JDK 的 HttpURLConnectionResponseErrorHandler 异常处理ClientHttpRequestInterceptor 请求拦截器
// 1. getForObject()  
User user1 = this.restTemplate.getForObject(uri, User.class);  
  
// 2. getForEntity()  
ResponseEntity<User> responseEntity1 = this.restTemplate.getForEntity(uri, User.class);  
HttpStatus statusCode = responseEntity1.getStatusCode();  
HttpHeaders header = responseEntity1.getHeaders();  
User user2 = responseEntity1.getBody();  
  
// 3. exchange()  
RequestEntity requestEntity = RequestEntity.get(new URI(uri)).build();  
ResponseEntity<User> responseEntity2 = this.restTemplate.exchange(requestEntity, User.class);  
User user3 = responseEntity2.getBody();  // 1. postForObject()  
User user1 = this.restTemplate.postForObject(uri, user, User.class);  
  
// 2. postForEntity()  
ResponseEntity<User> responseEntity1 = this.restTemplate.postForEntity(uri, user, User.class);  
  
// 3. exchange()  
RequestEntity<User> requestEntity = RequestEntity.post(new URI(uri)).body(user);  
ResponseEntity<User> responseEntity2 = this.restTemplate.exchange(requestEntity, User.class);  参考:
每天用心记录一点点。内容也许不重要,但习惯很重要!
原文:https://www.cnblogs.com/binarylei/p/10349067.html