XMLHttpRequest ajax Spring @ResponseBody, @RequestBody 404 에러 json data null 이유
XMLHttpRequest 를 활용한 비동기 통신에서 404 에러가 발생하는 원인에 대해서 알아보도록 하겠습니다.
XMLHttpRequest를 통한 비동기 통신부는 아래의 Link를 참고하세요.
Link : https://aljjabaegi.tistory.com/520
위의 코드를 보시면 Content-type 에 application/json 설정을 하고
클라이언트에서 json 데이터를 보낼꺼라고 설정을 합니다.
그리고 javascript object 를 JSON.stringify() 함수를 사용하여 json 객체로 만들어 전송하죠.
이렇게 하면 브라우저에서는 아래와 같이 Request payload에 json 데이터를 전송하게 됩니다.
이제 데이터를 받을 컨트롤러를 보도록 하죠.
@PostMapping(name="/test.do")
@ResponseBody
public String getData(@RequestBody SearchVO param) {
log.info(param.getSearchKeyword());
CommonSet set = new CommonSet();
try {
/*someting to do*/
set.setResultCode(MsgVariable.SUCCESS_CODE);
set.setResultMsg(MsgVariable.SEARCH_SUCCESS_MSG);
}catch(Exception e) {
set.setResultCode(MsgVariable.FAIL_CODE);
set.setResultMsg(MsgVariable.SEARCH_FAIL_MSG);
}
return CommonVariable.gson.toJson(set);
}
Post method 로 전송하기 때문에 @PostMapping 으로 선언하고 Json 데이터를 주고 받기 위해
@ResponseBody와 @RequestBody 어노테이션을 사용합니다.
하지만 아무 설정없이 @RequestBody 를 선언하면 404 에러가 발생하게 되죠. 그렇다고 @RequestBody 어노테이션을 제외하면 null이 출력되며 json 데이터를 받을 수 없습니다.
json 데이터를 Java Object 로 받기 위해서는 Jackson 라이브러리가 필요하고 그에 따른 AnnotationMethodHandlerAdapter, Message Converter 설정이 필요합니다.
dispatcher-servlet.xml 에서 AnnotationMethodHandlerAdapter 설정들을 자동으로 해주는게
<mvc:annotation-driven /> 입니다.
jackson 라이브러리를 추가하고 dispatcher-servlet.xml 에 <mvc:annotation-driven />를 추가합니다.
[pom.xml]
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
[dispatcher-servlet.xml]
<mvc:annotation-driven />
클라이언트에서 비동기로 json 데이터를 보내고
서버에서는 json 데이터를 java Object 로 변환하여 받게 됩니다.
'Programing > JavaScript' 카테고리의 다른 글
javascript call, apply, bind 차이점! 알짜만 빼먹기! (0) | 2020.02.21 |
---|---|
javascript DOM 변경 감지 How to detect javascript dom change (0) | 2020.01.31 |
Javascript ajax XMLHttpRequest 통신 구현 (0) | 2020.01.16 |
Javascript jQuery selector 비교 정리 querySelectorAll getElements 차이 NodeList, HTMLCollection 차이 (0) | 2020.01.08 |
브라우저 종료 이벤트 처리, 브라우저 새로고침 이벤트 처리 (0) | 2019.06.17 |
댓글