에러 내용 및 원인
페이지네이션 기능을 구현하면서 수정이 필요한 사항이 생겼다.
현재 프로젝트 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 형식의 데이터를 응답할 수 있는 메서드를 정의해주는 역할을 하고
실제로 처리하기 위해서는 위의 저 설정이 꼭 필요하다!