SpringBootで出力したRESTfulレスポンスをReactで取得して表示する。
RESTfull API から Hello World を取得して表示する。
SpringBoot側にCORS対策 (CORS : オリジン間リソース共有 / Cross-Origin Resource Sharing)
localhostでテストするが、ドメイン、プロトコル、ポート番号のうちポート番号が異なるので(8080と3000)、CORS対策が必要となる。
SpringBoot側のRestControllerのクラスに@CrossOriginアノテーションをつける。
package com.example.RestfulTest; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @CrossOrigin public class HelloController { @GetMapping("/hello") public Hello hello() { return new Hello(); } }
環境の構築
npx create-react-app hello-world
App.js
import './App.css'; import HelloWorld from './HelloWorld'; function App() { return ( <div className="App"> <HelloWorld /> </div> ); } export default App;
HelloWorld.js
import React from 'react' class HelloWorld extends React.Component { constructor(props) { super(props); this.state = { hello: "" }; this.buttonClick1 = this.buttonClick1.bind(this); } // ボタンがクリックされると呼ばれる関数。 buttonClick1() { fetch("http://localhost:8080/hello", { method:'GET' } ) .then(response => response.json()) // レスポンスからJSONを取り出す。 .then( (responseJSON) => { this.setState({ hello: responseJSON.hello }) // JSONから「hello」のキーを取り出す。 }, (error) => { console.log(error); } ) } render() { return ( <div> <button onClick={this.buttonClick1}>Click!</button> {this.state.hello} </div> ); } } export default HelloWorld;