현재 버전

Vue에서든 postman에서는 아래 컨트롤러로 데이터가 잘 받아지나요??

일단 첫번째로 수신받은 데이터가 @RequestBody Jsonp jsonobject 담기게 될텐데

jsonobject 값이 잘 들어오는지 확인해보셔야 할 것 같습니다.


@RestController // 데이터를 전송하기 위한 컨트롤러
public class GetJson {
    @PostMapping("/login")
    public Jsonp login(@RequestBody Jsonp jsonobject) {
        Jsonp object = new Jsonp();
        String id = object.getId();
        String pw = object.getPw();
        return jsonobject;
    }
}


그리고 아래 코드를 적으신 이유가 있는 건가요?? 받아온 Json객체를 콘솔에 출력값을 보고 싶다면

바로 jsonobject에서 사용하시면 되는데 아래와 같이 Jsonp object는 new 생성자로 인스턴스를 새로 만드신 것이기 때문에 id와 pw를 get해도 아무 데이터가 없습니다.

Jsonp object = new Jsonp();
        String id = object.getId();
        String pw = object.getPw();


두번째로 vue에서

mounted() {
  axios
    .get('http://example.com/test')
    .then((res) => console.log(res.data));
}

axios get요청을 하셨는데 같이 넘기는 parameter나 데이터형태가 없네요...


세번째로 인터넷 브라우저에서  https://example.com/login?jsonobject={"id":"1123","pw":"1sdfas"} 이런식으로 바로 입력하게 되면 데이터를 전달하지 못합니다.

일단 login 컨트롤러에서 jsonobject라는 parameter로 데이터를 받는게 아니기도 할 뿐더러, url에 괄호와 따옴표등 특수문자를 입력한 상태로 전달할 경우 잘못된 url로 인식될 확률이 매우 높습니다.

해당 컨트롤러에서 @RequestBody로 선언한 Jsonp 객체는 수신데이터를 jsonp 객체로 변환해서 jsonobject라는 이름으로 메모리에 할당한다는 것뿐이지 데이터를 요청할 때 jsonobject라는 parameter로 사용할 수 있다는 것을 뜻하지 않습니다. 따라서 브라우저에 위와 같은 형식으로 직접 입력한다면

데이터가 없기 때문에 404 code를 반환하는게 맞습니다.


그러나 postman에서 postman으로 https://example.com/login으로  보냈을때 json 형식으로 값 반환은 잘 됩니다.

라고 말씀하신건 postman에서 json타입의 객체를 잘 넘겼고 그걸 당연히 jsonobject라는 객체에 잘 받았기 때문입니다. 고로 데이터가 존재하는 것이구요

즉 사진과 같이 postman에서 요청하신 형태랑  https://example.com/login?jsonobject={"id":"1123","pw":"1sdfas"}  이형태가 동일한게 절대 아닙니다!


위와 같은 형태로 브라우저에 입력하셨을 때 IDE 콘솔에서 Jsonp jsonobject 라고 선언하신 객체에 데이터가 찍히는지 sysout이든 log등으로 찍어보시면 안나올 것입니다.




수정 이력

2020-08-02 14:04:21 에 아래 내용에서 변경 됨 #1

Vue에서든 postman에서는 아래 컨트롤러로 데이터가 잘 받아지나요??

일단 첫번째로 수신받은 데이터가 @RequestBody Jsonp jsonobject 담기게 될텐데

jsonobject 값이 잘 들어오는지 확인해보셔야 할 것 같습니다.


@RestController // 데이터를 전송하기 위한 컨트롤러
public class GetJson {
    @PostMapping("/login")
    public Jsonp login(@RequestBody Jsonp jsonobject) {
        Jsonp object = new Jsonp();
        String id = object.getId();
        String pw = object.getPw();
        return jsonobject;
    }
}


그리고 아래 코드를 적으신 이유가 있는 건가요?? 받아온 Json객체를 콘솔에 출력값을 보고 싶다면

바로 jsonobject에서 사용하시면 되는데 아래와 같이 Jsonp object는 new 생성자로 인스턴스를 새로 만드신 것이기 때문에 id와 pw를 get해도 아무 데이터가 없습니다.

Jsonp object = new Jsonp();
        String id = object.getId();
        String pw = object.getPw();


두번째로 vue에서

mounted() {
  axios
    .get('http://example.com/test')
    .then((res) => console.log(res.data));
}

axios get요청을 하셨는데 같이 넘기는 parameter나 데이터형태가 없네요...


세번째로 인터넷 브라우저에서  https://example.com/login?jsonobject={"id":"1123","pw":"1sdfas"} 이런식으로 바로 입력하게 되면 데이터를 전달하지 못합니다.

일단 login 컨트롤러에서 jsonobject라는 parameter로 데이터를 받는게 아니기도 할 뿐더러, url에 괄호와 따옴표등 특수문자를 입력한 상태로 전달할 경우 잘못된 url로 인식될 확률이 매우 높습니다.

해당 컨트롤러에서 @RequestBody로 선언한 Jsonp 객체는 수신데이터를 jsonp 객체로 변환해서 jsonobject라는 이름으로 메모리에 할당한다는 것뿐이지 데이터를 요청할 때 jsonobject라는 parameter로 사용할 수 있다는 것을 뜻하지 않습니다.


postman에서 postman으로 https://example.com/login으로  보냈을때 json 형식으로 값 반환은 잘 됩니다.

라고 말씀하신건 postman에서 json타입의 객체를 잘 넘겼고 그걸 당연히 jsonobject라는 객체에 잘 받았기 때문입니다.

즉 사진과 같이 postman에서 요청하신 형태랑  https://example.com/login?jsonobject={"id":"1123","pw":"1sdfas"}  이형태가 동일한게 절대 아닙니다!