분류 전체보기 216

@ResponseBody, @RequestBody, @RequestMapping 애노테이션 정리 + ModelAndView

@ResponseBody 뷰 페이지가 아닌 응답값을 그대로 반환하기 위해 사용 비동기 처리를 하는 경우에 사용(ajax) 자바 객체를 HTTP 요청의 바디 내용으로 매핑하여 클라이언트로 전달(서버 -> 클라이언트로 전송하는 경우) HttpMessageConverter는 @ResponseBody가 붙은 파라미터가 있으면 HTTP 요청의 미디어 타입과 파라미터의 타입을 먼저 확인한다. @ResponseBody 어노테이션을 사용하면 http 요청 body를 자바 객체로 전달받을 수 있음 서버에서 클라이언트로 응답 데이터를 전송하기 위해 @ResponseBody 어노테이션을 사용하여 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송한다. @RequestBody HTTP 요청의 본문(body)이..

카테고리 없음 2023.05.02

@RestController 애노테이션 정리

@RestController의 특징 스프링프레임워크 4.x 버전 이상부터 사용 가능 @Controller에 @ResponseBody가 결합됨 -> 컨트롤러 클래스에 @RestController를 붙이면, 하위 메서드에 @ResponseBody를 붙이지 않아도 문자열과 JSON 등을 전송할 수 있음 RestController는 Spring MVC Controller에 @ResponseBody가 추가된 것이기 때문에 @Controller와 달리 @RestController는 컨트롤러 클래스의 각 메서드마다 @ResponseBody를 추가하지 않아도 HTTP 응답데이터(body)에 자바 객체가 매핑되어 전달됨 @Controller인 경우는 바디를 자바 객체로 받기 위해서는 @ResponseBody 어노테이션을..

카테고리 없음 2023.05.02

Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 에러 해결

경과 로그인 기능을 구현하기 위해 ajax로 서버에 같은 아이디와 비밀번호를 가진 회원이 있는 지 조회한 후 그 결과를 반환받고자 했다. 그런데 자꾸 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 에러가 떴다. 검색해봐도 ajax 요청 코드 내부에 json인걸 명시하라는 말밖에 없었는데 나는 json인걸 명시해줬다. 컨트롤러 코드 @PostMapping("/checkUser") @ResponseBody public String checkUser(@RequestBody HashMap userInfo) throws Exception { String username = userInfo.get("username"); St..

카테고리 없음 2023.03.31

mybatis로 count 쿼리 실행 시 계속 0으로 출력되는 문제

경과 회원가입 시 ID 중복여부 유효성 검사를 위해 ajax로 json 포맷으로 컨트롤러로 데이터를 전송하고, sql매퍼 파일에서 count(*)로 전송받은 데이터가 테이블에 몇개나 있는지 조회하는 쿼리를 실행하는데, 테이블에 똑같은 값이 굉장히 많은데도 불구하고 계속 0으로 출력되었다. 원인 json의 기본 데이터 포맷을 보면 키, 값 쌍으로 이루어진 것을 알 수 있다. 여기서 키는 항상 쌍따옴표로 감싸지고, 값도 문자열이라면 쌍따옴표로 감싸지게 되는데, ajax로 컨트롤러에 전송하는 순간 쌍따옴표로 감싸지게 되어 원래의 문자열보다 2자리가 더 늘어나게 된다. 아래는 실제 문자열의 길이보다 값이 더 증가한 예시이다. JSON으로 전달받은 값의 길이를 출력해보니 4가 나왔는데, 실제로 전송한 값(user..

카테고리 없음 2023.03.31

ajax로 요청해서 성공 후 404 에러로 응답받는 경우

경과 회원가입 로직을 작성 후 ajax를 통해 비동기 요청을 서버에 보내고, 서버에서 회원가입 쿼리가 작성된 매퍼를 호출해 작성된 SQL문을 실행하여 회원가입을 성공시켰으나 정작 회원가입 페이지에는 404에러가 발생하는 현상 원인 ajax가 실행된 후에는 JSON이나 XML 같은 타입으로 결과를 리턴해주어야 하는데, 여기서 컨트롤러의 반환 타입을 void로 지정해서 아무것도 리턴하지 않았기때문에 브라우저는 서버로부터 아무런 데이터를 받지 못해 에러를 띄운 것이다. 쉽게 설명하자면, 브라우저에서는 요청을 보냈으나 서버가 아무런 응답없이 너무 조용해서 나에게도 들려온 소식이 없다는 뜻인 것 같다. 해결방법 해당 요청을 처리하는 컨트롤러에 @ResponseBody 애노테이션을 붙여줌으로써 정상적으로 응답했다는..

카테고리 없음 2023.03.31