●GlobalExceptionHandeler
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatusCode status,
WebRequest request)
{
System.out.println("유효성 실패 "+ex.getMessage());
System.out.println("유효성 실패 "+ex.getBindingResult());
ErrorResponse errorResponse = ErrorResponse.builder()
.errorCode(HttpStatus.BAD_REQUEST.toString())
.errorMessage(ex.getBindingResult().toString())
.wdate(LocalDateTime.now())
.build();
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorResponse);
}
이메일 길이를 지정해 줘서 그 길이보다 작거나 크면 이 오류문이 나타난다.
// @ExceptionHandler(BadException.class)
// public final ResponseEntity<ErrorResponse> handleException(BadException e){
// ErrorCode errorCode = e.getErrorCode();
//
// ErrorResponse errorResponse = ErrorResponse.builder()
// .errorCode(e.getErrorCode().getErrorCode())
// .errorMessage(e.getErrorCode().getMessage())
// .wdate(LocalDateTime.now())
// .build();
// return ResponseEntity.status(e.getErrorCode().getHttpStatus()).body(errorResponse);
// }
@handleMethodArgumentNotValid 이방식이랑 똑같다 .
●UserController
@DeleteMapping("users/{id}")
public ResponseEntity<User> deleteUser(@PathVariable Long id){
User dbuser = userService.delete(id);
return ResponseEntity.status(HttpStatus.ACCEPTED).body(dbuser);
}
●UserService
public User delete(Long id) {
Optional<User> dbUser = userRepository.findById(id);
if (dbUser.isEmpty()){
throw new UserException(ErrorCode.NOTDELETE);
}
// userRepository.deleteById(id);
userRepository.delete(dbUser.get());
//해당되는 아이디가 있으먄 삭제
// 없으면 삭제할 이유가 없다.
return dbUser.get();
}
dbUser.가 없으면 오류문을 출력한다.

package 형식은 이렇게 되어 있습니다.
●aa.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title</title>
<script>
function doSelect(){
fetch("http://localhost:8081/users")
.then(res => {
return res.json();
}
)
.then(data => {
console.log(data);
}
)
}
function doDelete(){
const a = []; // 배열선언
a.push(10);
a.push(20);
console.log(a)
const b = { a:"aa", b:"bb",c:function(){alert('함수'); } }; // 객체 선언
console.log(b)
const url = "http://localhost:8081/users/1";
fetch(url, {
method:"delete",
headers:{ 'Content-Type':'application/json'}
}
)
.then(res => {
return res.text();
}
)
.then(data => {
console.log(data);
}
)
}
</script>
</head>
<body>
<h1>aa.html</h1>
<button onclick="doSelect()">조회</button>
<button onclick="doDelete()">삭제</button>
</body>
</html>
우선 인텔리제이의 8081 포트를 실행 해준다.
그리고 8081/users를 불러온다 조회 버튼을 누를 시
삭제를 누를 시 8081/users의 id = 1 번째가 삭제가 된다.
●UserController
@Transactional(readOnly = true) // 영구속성에 의해서 setter 메서드 사용시 db에 update 실행됨...
@GetMapping("users/tran")
public String userstran(){
User dbUser = userRepository.findById(1L).orElseThrow();
dbUser.setUsername("김길동"); //업데이트 구문 실행
dbUser.setEmail("aa@naver.com");
return "tran";
}
@Transactional 을 사용하면 put 을 사용하지 않아도 업데이트가 가능하다
여기서 readOnly = true 을 사용하면 읽기만 가능하다. (사용하지 않으면 set을 남발하면 복잡해진다.)
이렇게 하면(readOnly = true) 사용하지 않고 하면
id 가 1번인 이름과 이메일이 김길동과 aa@naver.com 으로 바뀌면서 저장이 된다.
'spring boot' 카테고리의 다른 글
Spring boot 복습 (0) | 2024.03.18 |
---|---|
Spring boot 유효성 검사 //해당하는 내역 보여주기. / Jasypt 암호화 (0) | 2024.03.14 |
Spring boot 오류에 대한 설정/ UPDATE /{ID} (0) | 2024.03.11 |
Spring boot 웹에서 만든 패키지 보기 (0) | 2024.03.11 |
Spring boot 다른 포트 설정 (0) | 2024.03.11 |