스프링 - json, ajax 삽질

jinvicky·2023년 2월 7일
0

2023 Spring Project TIL

목록 보기
10/32

json을 주고받는 RestAPI 방식이 아직 약하다. 오늘도 생각보다? 애를 꽤 많이 먹었다.

대충 말하자면
1. jackson-databind-xml 태그를 pom.xml에 붙여놓고 잊어버려서 json값이 오는데 아니라 xml로 값이 왔었다.

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.5</version>
</dependency> => 요 설정 때문에

값이 아래처럼 나왔다.
<Integer>0</Integer>

*팁: 원하는 json으로 안 오는 거 같으면 GetMapping해서 경로로 값을 호출해보라.
(@ResponseBody 식이다. 또는 @RestController도 방법이란다.)
xml의 경우 대놓고 xml이라고 문구 나오고 그런 식이다.

  1. gson, jackson-databind 태그를 pom.xml에 안해서 @ResponseBody, @RequestBody해도 json값으로 안 넘어왔다.

  2. 이메일 중복검사를 할 때 ajax에서 보내준 이메일 값이
    컨트롤러에서 아래처럼 @가 인코딩되어서 찍혔다.

    이유는 복붙하다가 잘못해서. jsp에서 ajax 보낼때 아래처럼 보내면 발생한다.

$("#validateEmailBtn").click(function () {
                //post로 서버단에 ajax로 아이디 값을 전송해서 아이디가 중복인지 확인한다.
                $.ajax({
                    type: 'POST',       // 요청 메서드
                    url: '/member/chkDuplicateEmail',  // 요청 URI
                    headers: {"content-type": "application/json"}, // 요청 헤더
                    dataType: 'text', // 전송받을 데이터의 타입
                    data:  $("#email").val(),  // 서버로 전송할 데이터. stringify()로 직렬화 필요.
                    //와 진짜 {email: $("#email").val()} 식으로 어디서 본 걸로 긁었더니 안된다.ㅋㅋㅋㅋㅋㅋㅋㅋ 놀랍다. 오늘.
                    success: function (result) {
                        console.log("결과: "+ result, typeof result, result == 1, result === 1 );
                        let msg = "";
                        if(result == 1) {
                            msg = "이미 사용중인 이메일입니다.";
                        }else msg ="사용가능한 이메일입니다.";
                        alert(msg);       // result는 서버가 전송한 데이터
                    },
                    error: function () {
                        alert("error")
                    } // 에러가 발생했을 때, 호출될 함수
                }); // $.ajax()
        });

{email: $("#email").val()}하는 실수는 하지 말자.

테스트를 해보려는데 느닷없이 또 passwordEncoder, 시큐리티 쪽 설정에서 빈을 못찾는 에러가 났다.
https://okky.kr/articles/830075
그냥 이 사이트처럼 security-context.xml에 있던 아래 코드를

root-context.xml에도 추가했다. 그랬더니 다시 돌아갔다.

profile
Front-End와 Back-End 경험, 지식을 공유합니다.

0개의 댓글

관련 채용 정보