@Controller
public class RequestParamController {
@GetMapping("/request-params")
public void params(
HttpServletRequest request,
HttpServletResponse response) throws IOException {
String key1Value = request.getParameter("key1");
String key2Value = request.getParameter("key2");
response.getWriter().write("success");
}
}
request.getParameter()
로 파라미터 값을 사용할 수 있다.reponse.getWriter().write()
로 응답데이터를 직접 다룰 수 있다.POST /form-data
content-type: application/x-www-form-urlencoded
key1=value1&key2=value2
@Controller
public class RequestParamController {
@PostMapping("/request-params")
public void params(
HttpServletRequest request,
HttpServletResponse response) throws IOException {
String key1Value = request.getParameter("key1");
String key2Value = request.getParameter("key2");
response.getWriter().write("success");
}
}
HttpServletRequest.getParameter()
를 사용하면,@RestController
를 주로 사용하며, JSON형식으로 데이터를 전달한다./request-body
URL 요청POST
HTTP 메소드 사용@PostMapping("/request-body")
로 매핑// ✅ Board 클래스
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Board {
private String title;
private String content;
}
// ✅ Controller 어노테이션
@Controller
public class RequestBodyController {
// JSON을 객체로 변환해주는 Jackson 라이브러리
private ObjectMapper objectMapper = new ObjectMapper();
// ✅ "/request-body" URL 요청
// ✅ POST 요청만 허용
@PostMapping("/request-body")
public void requestBody(
HttpServletRequest request,
HttpServletResponse response
) throws IOException {
// HTTP Request Body로 받은 데이터를 String 변환을 도와주는 변수들
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
// ✅ JSON으로 클라이언트가 요청한 title, content 값으로 Board 클래스 생성
Board board = objectMapper.readValue(messageBody, Board.clss);
// ✅ 클라이언트에게 응답
response.getWriter().write("success");
}
}
위에서는 HttpServlet
객체를 이용해 데이터를 받고, 응답했는데
좀 더 쉽게 받고, 응답해보자.
// ✅ BEFORE
@Slf4j
@Controller
public class RequestParamController {
@GetMapping("/request-params")
public void params(
HttpServletRequest request,
HttpServletResponse response) throws IOException {
String key1Value = request.getParameter("key1");
int key2Value = request.getParameter("key2");
log.info("name={}", key1);
log.info("age={}", key2);
response.getWriter().write("success");
}
}
// ✅ AFTER
@Slf4j
@RestController
public class RequestParamController {
@GetMapping("/request-params")
public void params(
// ✅ @RequestParam 어노테이션 사용
@RequestParam String key1,
@RequestParam int key2
) {
log.info("name={}", key1);
log.info("age={}", key2);
return "success"
}
}
(default = True)
@RequestParam(required = true) String name, // 필수
@RequestParam(required = false) int age // 필수가 아님
@RequestParam(required = true, defaultValue = "unknwon") String name,
@RequestParam(required = false, defaultValue = "20") int age
// ✅ 기존 방법
@RestController
public class ModelAttributeController {
@PostMapping("/tutor")
public String requestTutor(
@RequestParam String name,
@RequestParam int age
) {
// ✅ 3줄로 작성
Tutor tutor = new Tutor();
tutor.setName(name);
tutor.setAge(age);
// 응답
return "tutor name = " + name
+ " age = " + age;
}
}
// ✅ @ModelAttibute 어노테이션 적용
@RestController
public class ModelAttributeController {
@PostMapping("/tutor")
public String requestTutor(
// ✅ 한줄로 작성!
@ModelAttribute Tutor tutor
) {
// 응답
return "tutor name = " + tutor.getName()
+ " age = " + tutor.getAge();
}
}
name
이면 setName(value);
메서드를 호출한다.@Controller
public class RequestBodyStringController {
@ResponseBody
@PostMapping("request-body-text")
public String requestBodyText(
@RequestBody String body,
@RequestHeader HttpHeaders headers
) {
// HttpMessageConverter가 동작해서 아래 코드가 동작하게됨
String bodyMessage = body;
return "request header = " + headers
+ " response body = " + bodyMessage;
}
}
💡 HTTPMessageConverter
- HTTP 요청과 응답을 변환하는 인터페이스이다.
- 요청 데이터를 자바 객체로 변환하거나, 자바 객체를 응답 본문으로 변환한다.
@RestController
public class JsonController {
@PostMapping("request-body-json")
public String requesBodytJson(@RequestBody Tutor tutor) {
Tutor reqTutor = tutor;
return "reqTutor.getName() = " + reqTutor.getName()
+ "reqTutor.getAge() = " + reqTutor.getAge();
}
}
@RestController
public class JsonController {
@PostMapping("request-body-json")
// ✅ 어노테이션 생략시, @ModelAttribute 적용
public String requesBodytJson(Tutor tutor) {
return "tutor.getName() = " + tutor.getName()
+ "tutor.getAge() = " + tutor.getAge();
}
}
@Controller
public class JsonController {
// ✅ Controller + ResponseBody = RestController
@ResponseBody
@PostMapping("request-body-json")
public Tutor requesBodytJson(@RequestBody Tutor tutor) {
return tutor
}
}
HttpMessageConverter
가 동작한다.내일배움캠프 스프링 입문 5주차