網頁

2020/12/25

Spring Boot Web @ResponseBody 作用

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效果。


沒有留言:

張貼留言