@Controller
스프링 프레임워크에게 웹 브라우저의 요청(request)를 받아들이는 컨트롤러 라고 알려주는것
스프링은 servlet-context.xml의 context:component-scan의 설정에 의해 이 클래스를 자바빈으로 객체 등록(메모리 바인드)
@PathVariable
URL 경로 상의 경로 변수가 여러 개일 때 PathVariable 애너테이션을 사용하여 특정한 경로 변수명을 지정
@ResponseBody
@GetMapping("/register/{userId}/{coin}")
public String registerByPath2(
@PathVariable("userId") String userId,
@PathVariable("coin") int coin
) {
log.info("userId:"+userId);
log.info("coin:"+coin);
return "success";
}
@RequestParam
요청파라미터 값을 가져오기 위한 어노테이션
폼 텍스트 필드 요소 값을 자바빈즈 매개변수로 처리 가능
HTML 폼 필드값이 숫자일 경우 컨트롤러 매개변수 타입이 문자열이면 그대로 문자열 형태로 요청데이터 취득
@ResponseBody
@PostMapping("/register01")
public String register01(@RequestParam("userId")String id
, @RequestParam("password") String pwd
,int coin
,MemberVO member) {
log.info("id:"+id);
log.info("pwd:"+pwd);
log.info("coin:"+coin);
log.info("member:"+member);
return "success";
}
//요청URL http://localhost/read01?userId=leejj
@GetMapping("/read01")
public String read01(Model model,@RequestParam String userId) {
log.info("read ->userId" +userId);
MemberVO member = this.memberService.read01(userId);
log.info("read01->member : " + member);
model.addAttribute("member",member);
return "read01";
}
@DateTimeFormat(JAVA ⇒ DB)
controller
@ResponseBody
@PostMapping("/register01")
public String register01(@DateTimeFormat(pattern="yyyy-MM-dd") Date regDate) {
log.info("regDate:"+regDate);
return "success";
}
vo
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.Data;
//POHO가 약해짐
@Data
public class MemberVO {
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date regDate;
}
/* 6. DateTimeFormat 애너테이션
DateTimeFormat 애너테이션의 pattern 속성값에
원하는 날짜 형식을 지정할 수 있음
*/
/*
요청URI : /registerByGet0105?userId=hongkd&dateOfBirth=1225
요청파라미터 : userId=hongkd&dateOfBirth=1225
요청방식 : get
*/
@ResponseBody
@GetMapping("/registerByGet0105")
public String registerByGet0105(String userId,
@DateTimeFormat(pattern = "MMdd") Date dateOfBirth) {
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
@ResponseBody
@GetMapping("/registerByGet0106")
public String registerByGet0106(String userId,
@DateTimeFormat(pattern="yyyy-MM-dd") Date dateOfBirth) {
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
/*
요청URI : /registerByGet0107?userId=hongkd&dateOfBirth=20240501
요청파라미터 : userId=hongkd&dateOfBirth=20240501
요청방식 : get
*/
@ResponseBody
@GetMapping("/registerByGet0107")
public String registerByGet0107(String userId,
@DateTimeFormat(pattern="yyyyMMdd") Date dateOfBirth) {
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
@RequestBody
HTTP 요청의 body 내용을 자바 개체로 매핑하는역할
java에서 해당 JSON 형식의 데이터를 받기 위해서 JSON →Java Object 변환
@ResponseBody
자바 객체를 HTTP 요청의 body내용으로 매핑하는 역할
Json 형태 객체 데이터 return
서버에서 클라이언트로 다시 응답 데이터 보낼때 java Object → JSON 또는 XML 같은 형식 변환
@ResponseBody 사용 안하는 경우
만약 객체의 생성 요청이 201 CREATED 반환 하는경우 ⇒ ResponseEntity로 감싸서 반환 해야 된다 즉 @ResponseBody
사용 못함
@GetMapping("/goHome08")
public ResponseEntity<MemberVO> home08(){
log.info("home08");
MemberVO member = new MemberVO();
member.setUserId("a001");
ResponseEntity<MemberVO> entity
= new ResponseEntity<MemberVO>(member,HttpStatus.NOT_FOUND);
if(member.getUserId()==null) {
return new ResponseEntity<MemberVO>(member,HttpStatus.NOT_FOUND);
}else {
return new ResponseEntity<MemberVO>(member,HttpStatus.OK);
}
}
@RestController
@Controller + @ResponseBody 추가
⇒ 메서드클래스 마다 @ResponseBody 추가 안해도 됨
1. Client 는 URI 형식으로 웹 서비스 요청 보냄
2. DispatcherServlet이 요청 처리 대상 찾음
3. HandlerAdapter을 통해 요청을 Controller로 위임
4. Controller는 요청을 처리한 후에 객체 반환
5. 반환되는 객체는 Json으로 Serialize 되어 사용자에게 반환
만약 객체의 생성 요청이 201 CREATED 반환 하는경우 ⇒ ResponseEntity로 감싸서 반환 해야 된다 즉 @restController 사용 못함
'JAVA > spring' 카테고리의 다른 글
파일업로드 (0) | 2024.05.11 |
---|---|
중첩된 자바빈 (0) | 2024.05.11 |
컨트롤러 메서드 매개변수 (0) | 2024.05.04 |
컨트롤러 응답 (0) | 2024.05.04 |
컨트롤러 요청 매핑 (0) | 2024.04.29 |