@RequestParam 사용 예시
@PostMapping("/user/phoneCheck") // 전화번호 중복 검사
@ResponseBody
public boolean phoneCheck(@RequestParam("phone") String phone){
LOG.info("userPhoneCheck 진입");
LOG.info("전달받은 번호:"+phone);
boolean flag=userService.userPhoneCheck(phone);
LOG.info("확인 결과:"+flag);
return flag;
}
/user/phoneCheck?phone=01012345678
프런트엔드에서 name과 RequestParam 변수명이 같아야 함
@RequestParam Map<String, String> params
Map<String, String> 타입으로 선언하면 모든 요청 파라미터를 담은 맵으로 받는다.
Map의 key=파라미터 이름, 값=파라미터의 값
@RequestParam(value="id", required=false, defaultValue="0")
required는 파라미터가 선택적으로 제공되도록 한다.
요청 파라미터가 존재하지 않으면 defaultValue로 설정한 값을 사용한다.
@GetMapping("/update")
public String updateForm(@RequestParam(value="id") Long id, Model model){
PostResponseDto postResponseDto=postService.findById(id);
model.addAttribute("post", postResponseDto);
return "/post/updateForm";
}
두 번째 예시
<form th:action="@{/post/update(id=${post.id})}">
<button type="submit" th:name="id" th:value="${post.id}" class="btn btn-primary float-right mt-3" th:if="${#strings.equals(post.author, username)}">수정</button>
</form>
Thymeleaf 이용
th:name은 @RequestParam의 value와 같다.
th:value는 value에 넣을 값
/post/update?id=24
@PathVariable 사용 예시
// 상세 게시판 조회
@GetMapping("/post/detail/{id}")
public String detail(@PathVariable("id") Long id, Model model) {
if(id == null){
model.addAttribute("post", new Post());
}else{
Post post= postService.findById(id).orElse(null);
postService.updateView(id); // 조회수 증가
model.addAttribute("post", post);
}
return "post/detail";
}
{}안의 변수를 받는다.
@PathVariable("id") id 이름의 Path 변수 {id}를 받아서 Long 타입으로 id에 담는다.
@RequestBody 사용 예시
// 수정
@PutMapping("/update/{id}")
public String update_comment(@PathVariable(value="id") Long comment_id, @RequestBody Map<String, String> map){
Long post_id=Long.parseLong(map.get("post_id")); // 게시글 번호
commentService.update(comment_id, map.get("comment"));
return "redirect:/post/detail/" + post_id;
}
XML이나 JSON 기반의 메시지를 사용하는 요청에 유용하다.
form에서 받는 정보가 특정 도메인 오브젝트에 매핑되지 않는 특별한 정보인 경우 권장
function updateComment(idx) {
if(!isValid("modalContent")) {
return false;
}
if(!confirm('댓글을 수정하시겠어요?')) {
return false;
}
var content = document.getElementById("modalContent");
var post_id=document.getElementById("postId");
var uri = "/comment/update/" + idx;
var headers = {"Content-Type": "application/json", "X-HTTP-Method-Override" : "PUT"};
var params = {"id" : idx, "comment" : content.value, "post_id" : post_id.value};
$.ajax({
url: uri,
type: "PUT",
headers: headers,
data: JSON.stringify(params),
success: function(response) {
/*
if (response.result == false) {
alert("댓글 수정에 실패하였습니다.");
return false;
}*/
window.location.reload();
$("#commentModal").modal("hide");
},
error: function(xhr, status, error) {
alert("에러가 발생하였습니다." + error + status);
return false;
}
});
}
@ModelAttribute 사용 예시
컨트롤러가 전달받는 오브젝트 형태의 정보
도메인 오브젝트나 DTO의 프로퍼티에 요청 파라미터를 바인딩해서 한 번에 받음
컨트롤러가 리턴하는 모델에 파라미터로 전달한 오브젝트를 자동으로 추가해줌. 모델의 이름은 기본적으로 파라미터 타입의 이름을 따른다.
@PostMapping("/new")
public String create(@ModelAttribute("post") @Valid PostRequestDto post, BindingResult bindingResult) {
if(bindingResult.hasErrors()){
return "post/createPostForm";
}
Object principal= SecurityContextHolder.getContext().getAuthentication().getPrincipal();
post.setAuthor(((UserDetails)principal).getUsername()); // 작성자=로그인한 유저 id
postService.create(post);
return "redirect:/post";
}
참고 👇
토비의 스프링 3.1 Vol.2 스프링의 기술과 선택
https://elfinlas.github.io/2018/02/18/spring-parameter/
https://www.baeldung.com/spring-thymeleaf-request-parameters
'Framework > Spring Boot' 카테고리의 다른 글
[Error] Error creating bean with name 'emailConfig': Injection of autowired dependencies failed; (0) | 2022.02.19 |
---|---|
redirect (0) | 2022.02.13 |
개인정보 수정 (0) | 2022.02.05 |
@DataJpaTest와 @SpringBootTest (0) | 2022.02.02 |
[Error] The given id must not be null!; nested exception is java.lang.IllegalArgumentException: The given id must not be null! (0) | 2022.01.26 |