Programing/JavaScript

XMLHttpRequest ajax Spring @ResponseBody, @RequestBody 404 에러 json data null 이유

리커니 2020. 1. 16.
반응형

 

XMLHttpRequest ajax  Spring @ResponseBody, @RequestBody 404 에러 json data null 이유

 

XMLHttpRequest 를 활용한 비동기 통신에서 404 에러가 발생하는 원인에 대해서 알아보도록 하겠습니다. 

XMLHttpRequest를 통한 비동기 통신부는 아래의 Link를 참고하세요.

 

Link : https://aljjabaegi.tistory.com/520

 

Javascript ajax XMLHttpRequest 통신 구현

Javascript ajax XMLHttpRequest 통신 구현 최근 웹 개발 트랜드 최근 React, Angular, Vue, GO 등 다양한 Javascript 프레임워크들이 대두되면서 Jquery 의 점유율이 떨어지고 있는 것이 추세입니다. 2006년 jQue..

aljjabaegi.tistory.com

위의 코드를 보시면 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 로 변환하여 받게 됩니다. 

 

 

반응형

댓글

💲 추천 글