Spring
API
Coarti
2024. 1. 7. 21:56
- 서버간 통신 시 JSON의 형태로 데이터를 주고 받는 것을 간단히 생각해두면 좋다
- 특정 경로로 가면 어떠한 데이터를 받는다
간단한 동작 예시이다
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!!");
return "hello";
}
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-tamplate";
}
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
HTTP 통신의 응답몸체에 값을 직접 넣는 것이다. 따로 받을 페이지가 없어도 값을 확인 해볼 수 있다.
그동안에 차이가 있다면 브라우저 흰 화면을 우클릭하여 페이지 소스를 보면 다른 태그없이 문자만 출력된것을 볼 수 있다.
컨트롤러에서 저 글자만 넘겨준 것이다
앞서 소개한 JSON으로 사용하기 위해 내용을 추가하자
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
name = this.name;
}
}
해당 경로의 결과는 다음과 같다
Hello 클래스를 따로 분리하는게 정식이나 보기좋은 예시를 위해 작성했다
JSON 은 {key: value}의 형태로 이뤄진 객체이다. XML의 형태에서 JSON을 사용하는 추세다
정리하자면
컨트롤러에서 @ResponseBody가 있는 경로는 HTTP의 BODY에 문자 내용을 직접 반환한다.
ViewResolver 대신 HttpMessageConverter가 동작하고
단순 문자면 StringHttpMessageConverter(StringConverter)
객체의 경우 MappingJackson2HttpMessageConverter(JsonConverter)를 사용한다
byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있다
구글의 Gson 라이브러리도 유명하지만 사용의 불편함이 없다면 Jackson 라이브러리도 훌륭하다
728x90