먼저 get요청을 해보자.
@GetMapping("/resp/json")
public String respJson() {
return "문자열";
리턴타입이 String이므로 문자열을 리턴했다.
json으로 리턴 해보자. 먼저 메모장을 열어서 아래와같이 작성해주고 복사한 후
아래와 같이 return에 붙여넣으면 역슬래시()가 같이 붙어진다.
@GetMapping("/resp/json")
public String respJson() {
return "{\"username\" : \"cos\"}";
}
쌍따옴표가 원래는 문자열을 표시하는 것이기 때문에, 역슬래시()가 붙어야 그대로 표시된다.
저장하고 브라우저에서 요청해보면 이렇게 나온다.(이전에 chrom에 json viewer 설치가 필요하다.)
json viewer를 설치하지 않으면 일반적인 문자열로 나온다.
json응답은 성공했지만 일일히 return을 json으로 입력할 수 없다. 오브젝트로 받아서 오브젝트로 응답해야한다. 먼저 Uesr라는 Object를 생성한다.
public class User {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
그리고 아래와 같이 작성하면서 import해준다.(import 단축키 : command+shift+O)
@GetMapping("/resp/json/object")
public User respJsonObject() {
User user = new User();
user.setUsername("홍길동");
return user;
}
User user = new User();
부분에서 user 오브젝트를 리턴
매서드 타입을 User 오브젝트로 받아준 후 User객체를 생성하고 User 오브젝트가 가지고 있는 username를 홍길동으로 설정한 모습이다.
다시 브라우저 요청
원래는 User Object를 json으로 리턴하고 싶다면,
@GetMapping("/resp/json/object")
public String respJsonObject() {
User user = new User();
user.setUsername("홍길동");
String data = "{\"username\":\""+user.getUsername()+"\"}";
return data;
}
매서드 타입을 String으로 받으려면 위와같이 작성해줘야한다. User Object를 리턴하고싶다면 내가 일일히 데이터를 빼와서 직접 만들어서 응답을 한 것이다.
하지만 실제로 이렇게 쓰지 않는다.
@GetMapping("/resp/json/javaobject")
public User respJsonJavaObject() {
User user = new User();
user.setUsername("홍길동");
return user;
}
위는 User Object를 그대로 리턴해서 return이 되면서 클라이언트 웹브라우저로 통신이 될 때 자동으로 "{\"username\":\""+user.getUsername()+"\"}";
이부분이 해결 된 것이다. 이는 Message Converter 라는 클래스가 자동으로 JavaObject를 Json(구:xml)으로 변경해서 통신을 통해 응답해준 것이다.
참고로 @RestController
일때만 Message Converter가 작동한다.