개발 기록이

[Error] 406 에러 해결 방법 (feat.브라우저에 JSON 출력) 본문

Error 모음집

[Error] 406 에러 해결 방법 (feat.브라우저에 JSON 출력)

studyingbackhoe 2022. 7. 31. 18:31

@Restcontroller를 이용해서 ResponseEntity로 JSON 값들을 브라우저로 출력하던 중 406 에러가 발생했다.

@RequestMapping(value = "/test", method= RequestMethod.GET, produces = { "application/json;charset=UTF-8" })
public ResponseEntity<HashMap<String, Object>> test(HttpServletRequest request, @RequestParam HashMap<String, Object> param) {

    HashMap<String, Object> resultMap = new HashMap<String, Object>();
    List<HashMap<String, Object>> list = null;
        if (param.isEmpty() || !(param.containsKey("testingParam1"))) {
            resultMap.put("result", "param error!");
        } else {
            list = testService.getBoardList(param);
            resultMap.put("result", "success");				
        }	
    	return ResponseEntity.status(HttpStatus.OK).body(resultMap);
}

 


[ 406 에러 원인 ]

서버에서 Accept 등의 헤더에 적혀있는 형식을 생성해 낼 수 없을 때 발생한다고 한다.

 

[ 해결방안 ]

1. servlet-context.xml

<annotation-driven /> 유무 확인

 

2. web.xml

appServlet의 url-pattern이 /* 로 되어있는지 확인

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/*</url-pattern> 
</servlet-mapping>

 

 

3. @RequestMapping 에 URI Mapping 잘 작성했는지 확인

4. pom.xml 에 jackson 라이브러리 추가

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId>
    <version>2.8.8</version> 
</dependency>

 

* Jackson 라이브러리

 

자바용 json 라이브러리로 Json 뿐만 아니라 XML/YAML/CSV 등 다양한 형식의 데이터를 지원하는 data-processing 툴.

 

 

JSON 출력 성공!

 


출처: https://joddev.github.io/2018/11/19/406-Not-Acceptable-in-Spring.html , https://devkingdom.tistory.com/15