Gradle ProjectJava2.1.8com.exampletodoappSpring WebSpring Data JPAH2 DatabaseLombokcom.example.todoapp
controllersrepositoriesmodelsservices, but this time it is omittedmodels
package com.example.todoapp.models;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Data
@Entity
public class Task {
@Id
@GeneratedValue
private Long id;
private String summary;
private Boolean done = false;
public Task(){}
}
@DatatoString () method and hashCode () method
@Entity@Id@GeneratedValuestrategy or generator (I have not tried it)repositories
package com.example.todoapp.repositories;
import com.example.todoapp.models.Task;
import org.springframework.data.jpa.repository.JpaRepository;
public interface TaskRepository extends JpaRepository<Task, Long> {
}
JpaRepositoryCrudRepository interface, which is an ancestor of JpaRepository, defines an interface such as findById.SimpleJpaRepository?JpaRepository specifies the target entity class and its primary key typefindById and deleteById.Task entity created this time is of type Long, specify Long here.controllers
package com.example.todoapp.controllers;
import com.example.todoapp.models.Task;
import com.example.todoapp.repositories.TaskRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping(value = "/api")
public class ApiController {
@Autowired
TaskRepository taskrepo;
@GetMapping(value = "/todos")
public List<Task> tasklist(){
return taskrepo.findAll();
}
@GetMapping(value = "todo/{id}")
public Optional<Task> retrieve(@PathVariable Long id){
return taskrepo.findById(id);
}
@PostMapping(value = "/todo")
public ResponseEntity<Task> newTask(@RequestBody Task task){
Task result = taskrepo.save(task);
return new ResponseEntity<Task> (result, HttpStatus.CREATED);
}
@PutMapping(value = "/todo/{id}")
public Task update(@PathVariable Long id, @RequestBody Task task){
task.setId(id);
return taskrepo.save(task);
}
@DeleteMapping(value = "/todo/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void delete(@PathVariable Long id){
taskrepo.deleteById(id);
}
}
@RestController@Controller, it seems that the return value of the method is made into a String and embedded in the template.
@RequestMapping@Autowired@Component annotation@ Repository and @ Service also have @Component added internally.TaskRepository interface are automatically stored in taskrepo.
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping@RequestMapping@GetMapping, equivalent to@RequestMapping (method = RequestMethod.GET)
@ResponseStatus200?$ curl http://localhost:8080/api/todo -XPOST -H 'Content-Type: application/json' -d '{"summary": "my first task"}' | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 75 0 47 100 28 170 101 --:--:-- --:--:-- --:--:-- 170
{
"id": 1,
"summary": "my first task",
"done": false
}
$ curl http://localhost:8080/api/todos | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 49 0 49 0 0 285 0 --:--:-- --:--:-- --:--:-- 286
[
{
"id": 1,
"summary": "my first task",
"done": false
}
]
$ curl http://localhost:8080/api/todo/1 | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 47 0 47 0 0 2045 0 --:--:-- --:--:-- --:--:-- 2136
{
"id": 1,
"summary": "my first task",
"done": false
}
$ curl http://localhost:8080/api/todo/1 -XPUT -H 'Content-Type: application/json' -d '{"summary": "updated my task", "done": true}' | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 92 0 48 100 44 2632 2412 --:--:-- --:--:-- --:--:-- 2666
{
"id": 1,
"summary": "updated my task",
"done": true
}
$ curl http://localhost:8080/api/todo/1 -XDELETE -v
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> DELETE /api/todo/1 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 204
< Date: Wed, 25 Sep 2019 15:29:37 GMT
<
* Connection #0 to host localhost left intact
Recommended Posts