Tiny Bunny [Spring] 406 (Not Acceptable) / Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation] - 솜님의 블로그
솜님의 블로그
카테고리
작성일
2024. 10. 31. 02:50
작성자
겨울솜사탕

에러 내용 및 원인

 

페이지네이션 기능을 구현하면서 수정이 필요한 사항이 생겼다.

현재 프로젝트 Spring 이관 + 검색 기준이 있는데, 2페이지에 넘어가면 전체 데이터의 2페이지가 조회됨.

 

Spring으로 이관작업 하면서 쿼리 스트링을 추가하는 것으로 수정,

이 과정에서 ajax 요청이 들어간 Controller에서 데이터를 응답하지 못하면서 오류가 발생되었다.

 

// ProductController (비동기 처리) 일부

@RestController
public class Product {

	@Autowired
	ProductService productService;

	@RequestMapping(value="/productList.do", method=RequestMethod.GET)
	public @ResponseBody List<ProductDTO> productPage(@ModelAttribute ProductDTO productDTO) {

 

// JavaScript 일부

   // AJAX 요청
        $.ajax({
            url: baseUrl,
            type: 'GET',
            data: {
            	product_page_num: currentPage,
                product_searchKeyword: searchKeyword,
                product_search_criteria: searchOption,
                product_location: productLocation,
                product_category: productCategory
            },
            dataType: 'json', // 응답 데이터 유형을 JSON으로 설정
            contentType : 'application/json', // json  타입
            success: function(data) {

 

 

페이지네이션 수정하면서 500번대 에러도 발생하고,

▼500 에러 발생 내용 (Content-Type 'null')

 

400번대 에러도 계속 발생되었는데,

오류가 해결이 안 돼서 꽤나 애를 먹었다.

 

이 오류들의 원인은 클라이언트와 서버의 형식이 일치하지 않을 때 발생된다.

 

 

해결방안

이 문제가 Getter가 빠졌을 때 발생된다고도 하고, 

json 타입으로 데이터 요청을 하는데 응답을 json 타입으로 하지 않아 발생된다고도 한다.

그리고 list 타입이 반환이 잘 안 된다고 해서 Map으로도 바꿔서 처리해 봤는데 동일한 오류가 계속 발생되었다.

 

문제가 될 수 있는 부분들을 살펴봤는데,

내 경우는 아예 xml에 설정이 빠져버려서 발생된 문제였다. 😢

 

 

// ds-servlet.xml

	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
       <property name="messageConverters">
           <list>
               <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
           </list>
       </property>
   </bean>

Spring에서 json 타입의 데이터를 요청/응답하기 위해서는 꼭 필요한 설정!

이 설정을 추가해야지만 요청과 응답시 데이터를 java 객체 ↔ json 형식의 데이터로 변환이 가능하다.

 

json 타입일 때의 @어노테이션은

@RestController, @ResponseBody, @RequestBody가 있는데

이 어노테이션은 json 형식의 데이터를 응답할 수 있는 메서드를 정의해주는 역할을 하고

실제로 처리하기 위해서는 위의 저 설정이 꼭 필요하다!