Project/Blog

Blog - 6.dummy data CURD + 예외처리

고마우미 2022. 5. 24. 01:24

[DummyControllerTest] -Insert

package com.jinseong.blog.test;

@RestController
public class DummyControllerTest {
	
	@Autowired	//의존성 주입(DI) >> 메모리 할당
	private MemberRepository memberRpository;
	
	//http://localhost:8000/blog/dummy/join(요청)
	//http 의 body에 username, password, email 데이터를 가지고 요청
	@PostMapping("/dummy/join")
	public String join(Member m) {
		
		memberRpository.save(m);
		System.out.println("id : " + m.getId());
		System.out.println("username : " + m.getUsername());
		System.out.println("password : " + m.getPassword());
		System.out.println("email : " + m.getEmail());
		System.out.println("role : " + m.getRole());
		System.out.println("createDate : " + m.getCreateDate());
		
		return "complete";
	}
}

 

[MemberRepository]

package com.jinseong.blog.repository;

//DAO
//자동으로 bean 등록이 된다.
//@Repository 생략 가능하다.
public interface MemberRepository extends JpaRepository<Member, Integer>{
	
}

 

[POST Request]

 

[실행 SQL]

    insert 
    into
        Member
        (id, createDate, email, password, role, username) 
    values
        (default, ?, ?, ?, ?, ?)

 

[결과]

 

[DummyControllerTest] - Select

package com.jinseong.blog.test;

//html 파일이 아니라 data를 return
@RestController
public class DummyControllerTest {

	@Autowired // 의존성 주입(DI) >> 메모리 할당
	private MemberRepository memberRpository;

	/* ... */
    
	// http://localhost:8000/blog/dummy/memberAll
	@GetMapping("/dummy/memberAll")
	public List<Member> list(){
		return memberRpository.findAll();
	}
	
	// http://localhost:8000/blog/dummy/members?page=0
	// http://localhost:8000/blog/dummy/members?page=1
	@GetMapping("/dummy/members")
	public List<Member> pageList(@PageableDefault(size = 2, sort = "id", direction = Direction.DESC) Pageable pageable){
		Page<Member> pagingMembers = memberRpository.findAll(pageable);
		//content
		List<Member> members = pagingMembers.getContent();
		return members;
	}
	
	// http://localhost:8000/blog/dummy/member/3
	// {id} 주소로 param을 전달 받을 수 있음
	@GetMapping("/dummy/member/{id}")
	public Member Detail(@PathVariable int id) {
		/*
		 * http://localhost:8000/blog/dummy/member/4 을 찾으면 db에서 못찾아오게 되면 member는 null
		 * Optional로 member 객체를 가져와서 null 판단 .orElseThrow() 으로 exception 발생
		 */


		Member member = memberRpository.findById(id).orElseThrow(()->{
			return new IllegalArgumentException("해당 유저는 없습니다. id :" + id);
		});

		
		/*		
		 * Member member = memberRpository.findById(id).orElseThrow(new Supplier<IllegalArgumentException>() {
			@Override
			public IllegalArgumentException get() {
				// TODO Auto-generated method stub
				return new IllegalArgumentException("해당 유저는 없습니다. id :" + id);
			}
		});	
		*/
		
		//member object = java object > json(Gson라이브러리)
		//spring boot = MessageConveter가 자동으로 json으로 변환해해서 browser에게 전달
		return member;
	}

	/* ... */
}

 

[DummyControllerTest] - Update

package com.jinseong.blog.test;

//html 파일이 아니라 data를 return
@RestController
public class DummyControllerTest {

	@Autowired // 의존성 주입(DI) >> 메모리 할당
	private MemberRepository memberRpository;

    /* ... */
	
	// save > id 정보 없으면 insert, id 정보 있으면 update
	// email,password
	// http://localhost:8000/blog/dummy/member/{id}
	@Transactional
	@PutMapping("/dummy/member/{id}")
	public Member updateMember(@PathVariable int id, @RequestBody Member reqMember) {//json Data -> Java Obejct
		System.out.println(id);
		System.out.println(reqMember.getPassword());
		System.out.println(reqMember.getEmail());
		
		Member member = memberRpository.findById(id).orElseThrow(()->{
			return new IllegalArgumentException("수정에 실패하였습니다");
		});
		
		member.setPassword(reqMember.getPassword());
		member.setEmail(reqMember.getEmail());
	
		//memberRpository.save(reqMember);
		
		//dirty Checking
		return member;
	}
	
    /* ... */
}

 

[DummyControllerTest] - Delete

package com.jinseong.blog.test;

//html 파일이 아니라 data를 return
@RestController
public class DummyControllerTest {

	@Autowired // 의존성 주입(DI) >> 메모리 할당
	private MemberRepository memberRpository;

	// http://localhost:8000/blog/dummy/member/{id}
	@DeleteMapping("/dummy/member/{id}")
	public String deleteMember(@PathVariable int id) {
		try{
			memberRpository.deleteById(id);
		}catch(EmptyResultDataAccessException e){
			return "삭제에 실패하였습니다. 해당 id는 존재하지 않습니다";
		}
		return "삭제 되었습니다 id : " + id;
	}
	
    /* ... */
}

 

[GlobalExceptionHanddler] - 예외처리

package com.jinseong.blog.handler;

@ControllerAdvice
@RestController
public class GlobalExceptionHanddler {
	@ExceptionHandler(value=Exception.class)
	public String hadnleArgumentException(Exception e) {
		return "<h1>" + e.getMessage() + "</h1>";
	}
}