본문 바로가기
Programming/SpringBoot

[Spring Boot] RESTful Service 강의 정리 (17) - JPA를 이용한 사용자 추가와 삭제 - POST/DELETE HTTP Method

by prinha 2020. 8. 27.
728x90
반응형

 

 

[Spring Boot] RESTful Service 강의 정리 (16) - JPA를 이용한 개별 사용자 목록 조회 GET HTTP Method

[Spring Boot] RESTful Service 강의 정리 (15) - JPA Service 구현을 위한 Controller, Repository 생성 [Spring Boot] RESTful Service 강의 정리 (14) - Spring Data JPA를 이용한 Entity 설정과 초기 데이터..

prinha.tistory.com


 

1. HTTP DELETE Method

@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable int id){
    User user = service.deleteById(id);

    if(user==null){
        throw new UserNotFoundException(String.format("ID[%s] not found", id));
    }
}

 

"id=1"인 데이터 삭제

 

데이터조회를 해보면 데이터가 삭제된 것을 알 수 있음

 

 

 

2. HTTP POST Method (데이터 생성)

// 새로운 사용자를 등록하는 method 구현
@PostMapping("/users")
public ResponseEntity<User> createUser(@Valid @RequestBody User user){
    User savedUser = service.save(user);

    // 사용자에게 요청 값을 변환해주기
    // fromCurrentRequest() :현재 요청되어진 request값을 사용한다는 뜻
    // path : 반환 시켜줄 값
    // savedUser.getId() : {id} 가변변수에 새롭게 만들어진 id값 저장
    // toUri() : URI형태로 변환
    URI location = ServletUriComponentsBuilder.fromCurrentRequest()
            .path("/{id}")
            .buildAndExpand(savedUser.getId())
            .toUri();

    return ResponseEntity.created(location).build();
}

 

데이터를 생성했으나 sql 에러 발생

 

에러의 원인

 

User doamin class에서 id(Primary key)값을 자동으로 생성되는 sequence로 설정해놓음

create sequence hibernate_sequence start with 1 increment by 1

 

이전에 이미 1번데이터가 저장되있는 상태이기때문에 sequence를 통해 "id=1" 값이 추가되면 오류 발생

 

 

-> 초기데이터값을 JPA와 상관없이 등록시켰기때문에 오류 발생, 임의의 데이터(큰 값)로 수정해놓기

-- data.sql

insert into user values(99991,sysdate(),'User1','test1111','750411-111111');
insert into user values(99992,sysdate(),'User2','test2222','850411-111111');
insert into user values(99993,sysdate(),'User3','test3333','950411-111111');

 

새로운 데이터 생성 완료

Header값을 조회하면 지금 추가한 데이터를 조회(사용)하기위해 

어떤 key값을 사용해야하는지 알려줌 (http://localhost:8088/jpa/users1)
-> ResponseEntity 사용했기 때문에

 

 

 

 

 

728x90
반응형