react app and spring boot
parent
b0f36ba13a
commit
fb49e5019e
89
ReactJs and SpringBoot.md
Normal file
89
ReactJs and SpringBoot.md
Normal file
@ -0,0 +1,89 @@
|
||||
# Backend
|
||||
|
||||
In SpringInitializer, create a simple SpringBoot RESTfull app to server bad jokes.n Be sure to select SpringWeb component.
|
||||
|
||||
*`src/main/java/djmil/cordacheckers/Joke.java`*
|
||||
```java
|
||||
package djmil.cordacheckers;
|
||||
|
||||
public record Joke(String joke) {
|
||||
}
|
||||
```
|
||||
|
||||
*`src/main/java/djmil/cordacheckers/ApiController.java`*
|
||||
```java
|
||||
package djmil.cordacheckers;
|
||||
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
public class ApiController {
|
||||
|
||||
@GetMapping("/api/badjokes")
|
||||
public ResponseEntity<Joke> badJokes() {
|
||||
Joke joke = new Joke("What do you call a fly without wings? A walk!");
|
||||
return ResponseEntity.ok(joke);
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
Run backend and check http://localhost:8080/api/badjokes. You should see JSON file with a joke inside.
|
||||
|
||||
# Frontend
|
||||
|
||||
Now, let's create a React WebApp. It’s super easy to get started with React by using [`create-react-app`](https://facebook.github.io/create-react-app/ "Create React App"). If you have the necessary tools installed (e.g. `node`, `npm`), you can just execute this command
|
||||
|
||||
```bash
|
||||
npx create-react-app enter-app-name-here
|
||||
```
|
||||
|
||||
Since we are going host front end app by itself (via node) it does not meter where exactly to place the generated web app.
|
||||
|
||||
*`webapp/src/App.js`*
|
||||
```js
|
||||
import './App.css';
|
||||
import React, { useState, useEffect } from 'react';
|
||||
|
||||
function App() {
|
||||
|
||||
const [joke, setJoke] = useState([]);
|
||||
useEffect(() => {
|
||||
fetch('/api/badjokes')
|
||||
.then((response) => response.json())
|
||||
.then((data) => {
|
||||
console.log(data.joke);
|
||||
setJoke(data.joke);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err.message);
|
||||
});
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className="App">
|
||||
<header className="App-header">
|
||||
<p>
|
||||
Here is your joke: {joke}
|
||||
</p>
|
||||
</header>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
```
|
||||
|
||||
Run the app with `npm start` command
|
||||
|
||||
## Proxy
|
||||
|
||||
By default React uses 3000 port. And all REST requests would fail, because SpringBoot serves on 8080. To fix this issue in your dev environment, add this line to the `package.json`
|
||||
|
||||
```json
|
||||
"proxy": "http://localhost:8080",
|
||||
```
|
||||
|
||||
This will configure underline server to redirect (proxy) all requests to specified domain. More [granular configuration](https://create-react-app.dev/docs/proxying-api-requests-in-development/) is also possible.
|
Loading…
Reference in New Issue
Block a user