코드
HomeController.java
@ResponseBody
@RequestMapping(value = "/getYarnResource", method = RequestMethod.POST)
public List<Map<String, Object>> getYarnResource(@RequestBody HashMap<String, Object> param) {
logger.info("ChartController getYarnResource() start >>");
//로직 작성
return new ArrayList<Map<String, Object>>();
}
sample.js
var paramJsonData = {}
$.ajax({
url: '/chart/getYarnResource',
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
async: true,
cache: false,
data: JSON.stringify(paramJsonData), // {}
success: function(result) {
// 성공적으로 데이터를 받아왔을 때 처리하는 부분
console.log('Success:', result);
},
error: function(xhr, status, error) {
// 요청이 실패하거나 에러가 발생했을 때 처리하는 부분
console.error('Error:', status, error);
}
});
원하는점
❗JSON 데이터를 처리하고싶다.
💡 json 데이터를 넘겨서 간편하게 컨트롤러측에서 Map 으로 받고 싶었다.
문제점
❗401 에러 발생
💡 계속해서 406, 415 에러가 발생했다.❗계속 응답 Content-Type 이 text/html 이다.
💡 @ResponseBody 로 처리되어 리턴되면 Content-Type 은 application/json 이 되어야한다.
💡 서버에서 에러가 발생하면서 멈추니까 계속 아래처럼 응답했다…….❗정상 시
💡정상이라면 아래처럼 나와야 한다.
해결법
STEP1. jackson 라이브러리 추가
<!-- Data Binding -->
<!-- JSON 데이터 처리를 위한 dependency -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
💡 위 라이브러리 임포트
STEP2. servlet-context.xml 설정 확인(1)
<context:component-scan base-package="com.kbcard.bdp" />
💡 패키지 빈등록이 제대로 되었는지 확인
STEP3. servlet-context.xml 설정 확인(2)
STS 하단 Namespaces 탭 > mvc 체크 확인
정리
❗일부 스프링3에는 기본적으로 내장된 기능이 없다.
💡 라이브러리를 추가하니까 가능했다.
💡 도움된 포스팅: https://devks.tistory.com/26❗스프링 jackson 라이브러리 내장
💡 정말 오랫동안 문제를 해결하려고 찾는도중에 기록할만한 내용이 보인다.
💡 스프링은 jackson 라이브러리를 기본내장한다고 한다.
💡 메이븐에서 스프링 버전에 기본내장된 jackson 라이브러리 확인하고 다운받았다.💡 컨트롤러 로직을 수행이 가능해졌다. 하지;만 여전히 응답을 json으로 뱉지 못했다..
💡 jackson 라이브러리의 문제라는것을 직감했고 위 포스팅을 보고 jackson-mapper-asl 가 필요하다는 것을 알게되었다.
Leave a comment