GOORM-DEEP DIVE 백엔드 3회차 회고 DAY17

Cori1304·2025년 3월 20일
0

GOORM-DEEPDIVE

목록 보기
16/19

글을 쓰게된 배경

부트캠프에서 처음으로 java수업을 받고 있기에 기록하는게 좋다고 생각했고, 수업이 있는 날이면 매일 글을 쓰려고 합니다. 쵀대한 몰랐거나 필요하다고 생각되는 내용 위주로 기록할 예정입니다. (제가 게을러서 이러한 시도를 성공한 적이 없기에 이번 부트캠프 목표 중 1가지입니다. 할 수 있도록 화이팅!!)



Spring rest API 사용하기

http 파일

이미지지를 참고해서 http/에 .http 파일을 만들고 아래 코드를 복붙한다.

###
GET http://127.0.0.1:8080/entity/users

###
GET http://127.0.0.1:8080/entity/users/1

###
POST 127.0.0.1:8080/entity/users
Content-Type:  application/json

{
"id": "userTest",
"pwd": "passTest",
"name": "유니콘",
"ebrillDate": "2024-03-20"
}


###
PUT  http://127.0.0.1:8080/entity/users/3
Content-Type:  application/json

{
"id": "modifyTest",
"pwd": "modifyTest",
"name": "유니콘1",
}

###
DELETE http://127.0.0.1:8080/entity/users/2

.http 코드를 복붙하면 아래 java 코드를 사용해서 API 예제를 진행

공통 ResponseEntityTestController 코드

ResponseEntityTestController안에 각각에 메서드를 정의해서 사용할 예정

@RestController
@RequestMapping("/entity")
public class ResponseEntityTestController {


    private List<UserDTO> users;

    public ResponseEntityTestController(){

        users = new ArrayList<>();
        users.add(new UserDTO(1,"user01", "pass01","다람쥐", new Date()));
        users.add(new UserDTO(2,"user02", "pass02","코앙ㄹ라", new Date()));
        users.add(new UserDTO(3,"user03", "pass03","노구리", new Date()));

    }


    }

GET

 @GetMapping("/users")
    public ResponseEntity<ResponseMessage> findAllUsers(){
        HttpHeaders heads = new HttpHeaders();
        heads.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
        
        Map<String, Object> responseMap = new HashMap<>();
        responseMap.put("users", users);
        ResponseMessage responseMessage = new ResponseMessage(200, "조회성공", responseMap);

        return new ResponseEntity<>(responseMessage, heads, HttpStatus.OK);
    }


 @GetMapping("/users/{userNo}")
    public ResponseEntity<ResponseMessage> findUserByNo(@PathVariable int userNo){
        HttpHeaders heads = new HttpHeaders();
        heads.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
        UserDTO foundUser =users.stream().filter(user -> user.getNo() == userNo)
                .collect(Collectors.toList()).get(0);
        
        Map<String, Object> responseMap = new HashMap<>();
        responseMap.put("user", foundUser);

        return ResponseEntity
                .ok()
                .headers(heads)
                .body(new ResponseMessage(200, "조회선공", responseMap));
    }
    
    

POST

@PostMapping("/users")
    public ResponseEntity<?> registUser(@RequestBody UserDTO newUser){
        int lastUserNo = users.get(users.size() - 1).getNo();

        newUser.setNo(lastUserNo + 1);
        users.add(newUser);

        return ResponseEntity
                .created(URI.create("/entity/users/" + users.get(users.size() - 1).getNo()))
                .build();
    }

PUT

@PutMapping("/users/{userNo}")
    public ResponseEntity<?> modifyUser( @PathVariable int userNo,@RequestBody UserDTO modifyInfo){

        UserDTO foundUser =users.stream().filter(user -> user.getNo() == userNo)
                .collect(Collectors.toList()).get(0);
        foundUser.setId(modifyInfo.getId());
        foundUser.setPwd(modifyInfo.getPwd());
        foundUser.setName(modifyInfo.getName());

        return ResponseEntity.created(URI.create("/entity/users/" + userNo)).build();
    }

DELETE

 @DeleteMapping("/users/{userNo}")
    public ResponseEntity<?> removeUser( @PathVariable int userNo){

        UserDTO foundUser =users.stream().filter(user -> user.getNo() == userNo)
                .collect(Collectors.toList()).get(0);

        users.remove(foundUser);

        return ResponseEntity
                .noContent()
                .build();
    }

Exception

ExceptionController

@ControllerAdvice
public class ExceptionController {
    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleUserNotFoundException(UserNotFoundException ex) {
        String code ="ERROR_CODE_00001";
        String description ="회원 정보 조회 실패";
        String details = ex.getMessage();
        
        return new ResponseEntity<>(new ErrorResponse(code, description, details), HttpStatus.NOT_FOUND);
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<ErrorResponse> methodValidException(MethodArgumentNotValidException e) {
        String code ="";
        String description ="";
        String details ="";

        if(e.getBindingResult().hasErrors()){
            details =e.getBindingResult().getFieldError().getDefaultMessage();
            System.out.println("details = " + details);
            String bindResult =e.getBindingResult().getFieldError().getCode();

            switch (bindResult){
                case "name":
                    code = "ERROR_CODE_000002";
                    description = "필수 값이 누락되었습니다";
                    break;
                case "Size":
                    code = "ERROR_CODE_000003";
                    description = "글자 수를 확인해야 합니다.";
                    break;
            }
        }

        return new ResponseEntity<>(new ErrorResponse(code, description, details), HttpStatus.BAD_REQUEST);
    }
}

배운점

  1. intellij를 사용하면 postman 없이도 API 테스트가 가능하다.
  2. exception 처리 방식을 api에 적용한 경험은 나중에 프로젝트에 크게 도움이 될거 같다.
profile
개발 공부 기록

0개의 댓글

관련 채용 정보