실패는 성공을 위한 밑거름

[스프링] 스프링 프레임워크에서 406에러 본문

devops/spring-boot

[스프링] 스프링 프레임워크에서 406에러

레드매실 2023. 6. 13. 22:53

내가 작성한 ajax로직에서 406에러가 난다.

※406에러 : 서버가 요청의 응답(response)을 보낼때 반환할수있는 포맷이 아닐경우 표시됨

 

문제 해결법 : 

1. 컨트롤러에서 응답에 관한 조건(annotation,json타입)을 정확하게 사용했는지 확인.

	//ajax에 응답을 하기 위해선 ResponseBody 어노테이션을 명시
	@ResponseBody  
	@RequestMapping(value = "jsonResponse")
	public ResponseEntity<?> request2json(@RequestParam(required = false) Map<String, Object> commandMap ,HttpSession session)
			throws UnsupportedEncodingException {
		boolean result = true;
	
		HashMap<String, Object> resultMap = new HashMap<>();
		resultMap.put("result", true);
		resultMap.put("message", "be happy day~");
		//ResponseData로 json형태를 만들어줌
		return new ResponseEntity<>(new ResponseData<HashMap<String,Object>>(result, resultMap), HttpStatus.OK);
	}

 

2. servlet.xml 설정에서 json 형태의 response설정을 할수있는지 확인

	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<!--             나의경우 위의 jackson bean객체가 없어서 406에러가 표시됐다. -->
        </list>
    </property>
	</bean>

위의 servlet.xml에서 text/html은 문자열만 response된다는뜻임

그래서 jackson의 bean객체를 추가했다.

 

결과 : 

잘해결되었다.

 

참고가된 블로그1 : https://cheershennah.tistory.com/179

 

[Spring] @RequestBody / @ResponseBody 어노테이션 이란?

스프링에서 비동기 처리를 하는 경우 @RequestBody , @ResponseBody를 사용한다. 비동기 처리를 위해 이 어노테이션들은 어떻게 작동할까? 클라이언트와 서버의 비동기 통신 클라이언트에서 서버로 통

cheershennah.tistory.com

 

참고가된 블로그2 : https://velog.io/@0_sujeong/error-spring-ajax-return-406%EC%97%90%EB%9F%AC