안녕하세요, Brad입니다. 이번 주말동안 qna step5 미션을 진행하면서 고민했던 부분과 그에 대한 정리를 해보려합니다.
Ajax를 통해 데이터를 주고 받을 때 어떻게 에러처리를 해야할까요?
이 부분에 대한 고민을 좀 오래했던 것 같아요. 결과적으로 제가 이해한바로는 'Ajax를 통해 보낸 것은 Ajax를 통해 결국 처리를 해야한다'라는 것입니다.
엥? 이게 무슨 말이냐구요? 이 말은 제가 ajax controller에서 에러발생시 기존
@Controller
에서는 다른 url로 redirect가 가능했는데 그것이 안된다는 것입니다.그럼 어떻게 처리해야 할까요?
- 일단
@RestController
에서는 데이터만 전달하기 때문에 Error 관련한 내용(에러 내용)을 객체를 기존에 만들어두었던Result
에 담아보냈습니다. - 근데 이렇게 보내면 문제점은 클라이언트로 데이터를 넘겨주는데 Ajax가 성공한 것으로 인식한다는 것입니다. 따라서 이를 Error로 인식하도록 해야합니다.
- 이를 위해서
ResponseEntity
를 썼습니다. 이를 사용하면 첫번째 매개변수로 데이터를 담고, 두번째엔 HttpSatatus 상태값을 넣으면 됩니다. 오류로 인식하려면 HttpSatatus 중 오류를 의미하는 값을 넣으면 되는 것이죠.
@PostMapping("") public ResponseEntity post(@PathVariable long questionId, HttpSession session, String comment) { Result result = valid(session); User sessionedUser = HttpSessionUtils.getUserFromSession(session); if(!result.isValid()) { return new ResponseEntity<>(result, HttpStatus.BAD_REQUEST); } Answer answer = new Answer( questionRepository.findById(questionId).orElseThrow(() -> new QuestionNotFoundException("해당 질문을 찾을 수 없습니다.")), userRepository.findById(sessionedUser.getId()).orElseThrow(() -> new UserNotFoundException("해당 유저를 찾을 수 없습니다.")), comment ); return new ResponseEntity<>(answerRepository.save(answer), HttpStatus.CREATED); } Colored by Color Scripter
- 일단
위에서
@RestController
는 데이터만 전달한다고 했는데요.@Controller
와의 차이는 뭘까요?@RestController
는@Controller
+@ResponseBody
의 조합에 지나지 않습니다.@Controller
는 Model의 값과 View를 찾아주는 역할을 하였습니다.- 하지만
@RestController
는 해당 Object와 Object data를 XML 또는 JSON 형태로 반환하는 역할을 합니다. - 같은 Controller이지만 역할이 다른 것이죠.
RESTful API는 뭘까요?
- 현재 단계에서는 딱 한마디로 어떤 것인지만 이해해보려 합니다. 다른 것들도 알아볼 것들이 많다보니.. 인터넷에서 다음과 같은 설명을 보았습니다.
A RESTful API is an application program interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data.
자바빈 기본 생성자 만들 때 유의사항
- 접근제한자를 public으로 두어야합니다. 아니면 안 만들어져 null값이 되기 때문에 오류가 발생합니다.
Ajax를 통해 추가한 답변을 지울 때 정상적으로 작동하지 않는 이슈
Event Delegation(이벤트 위임)
- 하위 자식 태그에서의 이벤트들을 바인딩해 상위 태그로 위임하여 한번에 이벤트들을 처리하는 것을 의미합니다.
on() 메서드의 역할
- 이벤트를 바인딩하는 역할을 합니다. 만약 해당 element가 없다면 이벤트를 바인딩하지 않습니다.
왜 ajax로 추가한 답변만 안되었던 것일까요?
- dynamic하게 추가된 부분에 대해선 이벤트 적용이 안되는 것 같습니다.
AOP에 대한 개념이 아직 잡히지 않아 활용부분을 우선 파고 있는데요. 참고한 링크에 대해서만 정리해보려합니다.
@Pointcut
안에 custom annotation쓰고 싶을 때 적용방법- 맨 처음 아니면 맨 끝에만
..
쓸 수 있는 것 같네요. 아니면*
를 이용하여 특정 번째에 지정할 수도 있지만 이건 별로 유용하지 않을 것 같네요.
[AOP 적용관련] 특정 매개변수 값을 가지고 AOP에 적용
'args' 에 .., question,..
와 같은 표현이 안되는 이유
'TIL' 카테고리의 다른 글
Today's Dev Notes(2018-12-06) (0) | 2018.12.06 |
---|---|
Today's Dev Notes(2018-12-03) (0) | 2018.12.03 |
Today's Dev Notes(2018-11-29) (0) | 2018.11.30 |
Today's Dev Notes(2018-11-26) (0) | 2018.11.27 |
Today's Dev Notes(2018-11-25) (0) | 2018.11.25 |