이둘은 일단 단편적으로 말해서 RequestBody는 데이터형식 json형식 데이터들을 받아올때 좋다고합니다.
ModelAttribute는 html 폼형식의 데이터를 받아올떄 사용하면 좋다고합니다.
아래는 간단한 product post하는 메서드입니다.
@PostMapping("/Products/Post")
public ResponseEntity<?> PostProducts(@RequestBody Product product,HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute("user") == null) {
// 세션에 사용자 정보가 없으면 로그인 페이지로 리다이렉트
return ResponseEntity.badRequest().build();
}
productService.save(product);
return ResponseEntity.ok().build();
}
RequestBody Product를 받아서 했습니다.
왜냐하면 vue에서 axios는 json형식으로 데이터를 보내는게 일반적이기 때문입니다.
저도 사실 vue는 잘 모릅니다 ㅎㅎ 하지만 프론트 프레임워크를 이해한다면 어떤상황에 데이터를 받을지 알수 있겠죠!
vue:
const config = {
headers: {
'Content-Type': 'application/json'
}
};
try {
this.axios.post('/Products/Post', data, config)
.then((response) => {
this.$router.go(0);
this.$alert('상품', '등록 성공');
})
.catch((error) => {
this.$alert('상품', '등록 실패');
});
} catch (error) {
// 예외 처리
console.error(error);
}
폼형식이면 @ModelAttribute 로 Product를 파라미터로 잡아야겟죠!
@PostMapping("/Products/Post")
public ResponseEntity<?> PostProducts(@ModelAttribute Product product,HttpServletRequest request) {
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute("user") == null) {
// 세션에 사용자 정보가 없으면 로그인 페이지로 리다이렉트
return ResponseEntity.badRequest().build();
}
productService.save(product);
return ResponseEntity.ok().build();
}
아래는 html form 형식의 데이터 전송입니다.
<form action="/Products/Post" method="POST">
<input type="text" name="name" placeholder="상품명">
<input type="number" name="price" placeholder="가격">
<input type="submit" value="전송">
</form>
'웹 > Spring' 카테고리의 다른 글
view Resolver란? (0) | 2023.09.03 |
---|---|
HTTP 응답 방식 (0) | 2023.09.02 |
spring 구조 (0) | 2023.07.03 |
스프링 mvc 패턴 이해 (0) | 2023.06.22 |
500 error java OutOfMemoryError (0) | 2023.06.21 |