@RestController @RequestMapping("todo") publicclassTodoController { @Autowired private TodoService service; @PostMapping publicResponseEntity<?> createTodo(@RequestBody TodoDTO dto) { try { StringtemporaryUserId="temporary-user"; // temporary user id. // (1) TodoEntity로 변환한다. TodoEntityentity= TodoDTO.toEntity(dto); // (2) id를 null로 초기화 한다. 생성 당시에는 id가 없어야 하기 때문이다. entity.setId(null); // (3) 임시 유저 아이디를 설정 해 준다. 이 부분은 4장 인증과 인가에서 수정 할 예정이다. 지금은 인증과 인가 기능이 없으므로 한 유저(temporary-user)만 로그인 없이 사용 가능한 어플리케이션인 셈이다 entity.setUserId(temporaryUserId); // (4) 서비스를 이용해 Todo엔티티를 생성한다. List<TodoEntity> entities= service.create(entity); // (5) 자바 스트림을 이용해 리턴된 엔티티 리스트를 TodoDTO리스트로 변환한다. List<TodoDTO> dtos= entities.stream().map(TodoDTO::new).collect(Collectors.toList()); // (6) 변환된 TodoDTO리스트를 이용해ResponseDTO를 초기화한다. ResponseDTO<TodoDTO> response= ResponseDTO.<TodoDTO>builder().data(dtos).build(); // (7) ResponseDTO를 리턴한다. return ResponseEntity.ok().body(response); } catch (Exception e) { // (8) 혹시 예외가 나는 경우 dto대신 error에 메시지를 넣어 리턴한다. Stringerror= e.getMessage(); ResponseDTO<TodoDTO> response= ResponseDTO.<TodoDTO>builder().error(error).build(); return ResponseEntity.badRequest().body(response); } } }
컨트롤러의 create메서드를 확인하다가 생소한 더블콜론(::)을 만났다. 더블콜론(::)이 뭐지?
더블콜론(::)이 뭐지? 물고기 대신 물고기 잡는 법
모르는 걸 만났을때 어떻게 검색해야할까? 구글링해도 사용법만 나올뿐 더블콜론이 뭐하는 애다~라는 정의가 없었다. 답답해하다가 팀장님께 살포시 질문을 들으니 물고기가 아닌 물고기 잡는 법을 알려주셨다. 감사합니다 팀장님👍
언어를 사용하다 모르는 걸 만나면 언어 + 언어버전 + Language Specification의 조합으로 검색해보세요. 원하는 정보를 기본부터 얻을 수 있을 거예요 From 팀장님
Language Specification을 검색할 생각은 전혀 못하고 있었는데 팀장님이 알려주신 덕에 얼른 java 1.8 language specification ::을 검색해서 찾아냈다! 내가 궁금했던 근본적인 정보가 다 들어있었다! 이렇게 찾는 거구나! 또 하나 배웠다! 재밌어!😻
그래서 더블콜론이 뭔데?
더블콜론은 Method Reference Expressions(메소드 참조 표현식)의 하나로 실제로 호출을 수행하지 않고 특정 형식의 메서드를 참조하는 역할을 한다.
@RestController @RequestMapping("todo") publicclassTodoController { @Autowired private ModelMapper modelMapper; @Autowired private TodoService service; @PostMapping publicResponseEntity<?> createTodo(@RequestBody TodoDTO dto) { try { StringtemporaryUserId="temporary-user"; // temporary user id. // (1) TodoEntity로 변환한다. TodoEntityentity= modelMapper.map(dto, TodoEntity.class); // (2) id를 null로 초기화 한다. 생성 당시에는 id가 없어야 하기 때문이다. entity.setId(null); // (3) 임시 유저 아이디를 설정 해 준다. 이 부분은 4장 인증과 인가에서 수정 할 예정이다. 지금은 인증과 인가 기능이 없으므로 한 유저(temporary-user)만 로그인 없이 사용 가능한 어플리케이션인 셈이다 entity.setUserId(temporaryUserId); // (4) 서비스를 이용해 Todo엔티티를 생성한다. List<TodoEntity> entities= service.create(entity); // (5) 자바 스트림을 이용해 리턴된 엔티티 리스트를 TodoDTO리스트로 변환한다. List<TodoDTO> dtos= entities.stream().map(e -> modelMapper.map(e, TodoDTO.class)).collect(Collectors.toList()); // (6) 변환된 TodoDTO리스트를 이용해ResponseDTO를 초기화한다. ResponseDTO<TodoDTO> response= ResponseDTO.<TodoDTO>builder().data(dtos).build(); // (7) ResponseDTO를 리턴한다. return ResponseEntity.ok().body(response); } catch (Exception e) { // (8) 혹시 예외가 나는 경우 dto대신 error에 메시지를 넣어 리턴한다. Stringerror= e.getMessage(); ResponseDTO<TodoDTO> response= ResponseDTO.<TodoDTO>builder().error(error).build(); return ResponseEntity.badRequest().body(response); } } }