Spring Boot Web (Spring MVC)的@ResponseBody
作用如下。
@ResponseBody
可掛在@Controller
類的API方法,效果相當於將回傳結果放入ResponseEntity
的body回傳,而非以ViewResolver去找對映的view。
例如下面的DemoController
類別掛有@Controller
。
第一個hello1()
會以ViewResolver去找view,如果沒設定在Spring Boot會回應Whitelabel Error Page。
第二個hello2()
把值設為ResponseEntity
的body回傳,在頁面得到hello2。
第三個hello3()
加上@ResponseBody
,相當於用ResponseEntity
的body回傳,在頁面得到hello3。效果同hello2()
。
DemoController
package com.abc.demo.controller;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Optional;
@Controller
public class DemoController {
@GetMapping("/hello1")
public String hello1() {
return "hello1"; // ViewResolver
}
@GetMapping("/hello2")
public ResponseEntity<String> hello2() {
return ResponseEntity.of(Optional.of("hello2"));
}
@GetMapping("/hello3")
@ResponseBody
public String hello3() {
return "hello3";
}
}
如果希望Controller每個方法都是以ResponseEntity
回傳,而非回傳view頁面,換句話說就是REST API要回傳json之類的內容,則可改用@RestController
,則該Controller的每個方法都會有@ResponseBody
效果。
沒有留言:
張貼留言