728x90
반응형
출처: https://velog.io/@jyyoun1022/Spring요청받기-어노테이션
@RequestMapping
- @RequestMapping에서 value 표기하지 않기!
- @ReponseBody로 응답이 뷰를 거치지 않고 바로 웹브라우저로 이동하게 합니다.
- @RequestMapiing에서 파라미터가 1개(URL지정)만 있다면 value를 생략할 수 있습니다.
@RequestMapping("/sample/not-value")
@ResponseBody
public String sample1(){
return "RequestMapping without value property";
}
@PathVariable로 URL경로 매개변수 읽기
- @RequestMapping에서 선언한 URL에 {키} 형식으로 URL 경로 매개변수를 설정합니다.
- 자바 메서드 매개변수에 @PathVariable("키") 어노테이션으로 URL 경로 매개변수가 매칭됨을 알립니다.
- 자바 매개변수 이름은 키와 달라도 상관 없습니다.👉예제에서의 키는 param이지만 매개변수 이름은 parameter입니다.
- {}안에 어노테이션뒤에 오는 파라미터의 타입으로 값을 입력해줍니다.
@ResponseBody
@RequestMapping("/sample/path/{param}")
public String samplePath(@PathVariable("param")String parameter){
return "Request Path Parameter : "+parameter;
}
@RequestParam으로 쿼리 스트링 매개변수 읽기
- URL에서 부가적인 정보를 입력받을 때 사용하는 쿼리스트링의 사용법입니다.
- 쿼리스트링은 URL에서 ?로 시작하고 각 항목은 키=값형식으로 서버에 값을 전달하는 방법입니다.
- 예제에서는 param이라는 키로 CODE:J라는 값을 전달 하였습니다.
- 자바 메서드 매개변수에 @RequestParam("키")어노테이션으로 쿼리스트링이 매칭됨을 알립니다.
- URL 끝에 ?+param(키)=CODE:J(값) 라고 입력합니다.
@ResponseBody
@RequestMapping("/sample/query-string")
public String sampleQueryString(@RequestParam("param")String parameter){
return "Sample Query String : "+parameter;
}
@RequestParam 여러개 사용하기
- 전의 예제와 똑같지만 @RequestParam을 2번 사용한 것입니다.
- 쿼리스트링은 키=값형식이기 때문에 URL에서 순서가 바뀌어도 관계가 없습니다.
- 쿼리스트링의 각 항목은 &표시로 구분합니다.
@ResponseBody
@RequestMapping("/sample/query-string-many")
public String sampleQueryString2(@RequestParam("param1")String parameter1,
@RequestParam("param2")String parameter2){
return "Many Query String : param 1 = " +parameter1 + "param2 = "+parameter2;
}
http://localhost:8080/sample/query-string-many?param1=CODE& param2=:J
@RequestParam 선택적 매개변수 사용하기
- 매개변수가 필수가 아닐 경우 처리하는 방법입니다.
- 필수 매개변수가 없다면 오류가 납니다.
- @RequestParam에 required = false옵션이 없다면 선택적 매개변수입니다.
- 쿼리스트링이 전달되지 않으면 기본값은 null 입니다.
- @RequestParam에 defaultvalue 속성이 있다면 선택적 매개변수 입니다.
- 쿼리스트링이 전달되지 않으면 기본값은 defaultValue에서 지정한 값에 따릅니다.
@ResponseBody
@RequestMapping("/sample/query-string-option")
public String sampleQueryStringOption(@RequestParam(value = "required")String required,
@RequestParam(value = "not_required", required = false)String notRequired,
@RequestParam(value = "default_value",defaultValue = "default value")String defaultValue) {
return String.format(
"Query String Options. required=%s,notRequired=%s, defaultValue=%s",
required, notRequired, defaultValue);
}
http://localhost:8080/sample/query-string-option?required=really
http://localhost:8080/sample/query-string-option?required=really& not_required=oh-my-god
http://localhost:8080/sample/query-string-option?required=really& not_required=oh-my-god& default_value=i-am-standard
@RequetsParam 없이 HTTP 매개변수 읽기
- 컨트롤러 메서드에서 아무런 어노테이션 없이 String등 Request와 관련 없는 타임의 파라미터가 선언되었을 경우 스프링은 @RequestParam(required=false, value={변수명}) 이라고 가정합니다
@ResponseBody
@RequestMapping("/sample/withdout-request-param")
public String sampleWithdoutRequestParam(String value){
return value;
}
@RequestParam(value = "value", required = false) String value
String value
- 위의 두 줄의 파라미터는 동일한 의미를 가집니다.
DTO 객체를 이용해 매개변수 읽기
- 파라미터 값을 담을 DTO객체를 선언합니다.
- DTO 객체를 이용해서 파라미터를 입력받는 것을 커맨드 패턴이라고 부릅니다.
- DTO 객체에는 setter메서드가 모두 있어야 정상 동작합니다.
- DTO의 값 출력을 위해 @ToString 어노테이션을 해줍니다.
- DTO를 사용할 때는 파라미터에 @RequestParam 어노테이션을 붙이지 않습니다.
- HTTP 매개변수는 자동으로 DTO 객체의 값으로 설정됩니다.
GET <http://localhost:8080/sample/param-dto?name=spring-boot&age=27hobby=coding>
name : spring-boot, age : 27, hobby : coding
- GET 파라미터 뿐만 아니라 POST 파라미터도 처리할 수 있습니다.
SampleRequestDTO 클래스를 만들어줍니다.
import lombok.Setter;
import lombok.ToString;
@Setter
@ToString
public class SampleRequestDTO {
private String name;
private int age;
private String hobby;
}
Controller
@ResponseBody
@RequestMapping("/sample/param-dto")
public String sampleParamDTO(SampleRequestDTO sampleRequestDTO){
return sampleRequestDTO.toString();
}
http://localhost:8080/sample/param-dto?name=spring-boot&age=27&hobby=coding
@GetMapping
- HTTP GET 요청이 올때만 자바 메서드가 실행됩니다.
- 클라이언트에서 서보로 정보를 요청할떄 사용합니다.
- 게시물 조회에 주로 쓰입니다.
- 데이터를 넘길때 주소창을 이용해 넘기는 방법입니다.
- SQL의 SLECT라고 생각하면 쉽습니다.
- GetMapping 어노테이션은 @RequestMapping(method=RequestMethod.GET, value=..) 의 축약형 표현입니다.
@GetMapping("/sample/get-mapping")
@ResponseBody
public String sampleGetMapping(){
return "this is get mapping example";
}
@PostMapping
- HTTP POST 요청이 올 때만 자바 메서드가 실행됩니다.
- 클라이언트에서 서버로 새로생성하거나 업데이트 할 때 사용합니다.
- 게시판 작성,수정에 주로 씁니다.
- SQL의 CREATE를 생각하면 쉽습니다.
- PostMapping 어노테이션은 @RequestMapping(method=RequestMethod.POST, value=..) 의 축약형 표현입니다.
@PostMapping("/sample/post-mapping")
@ResponseBody
public String samplePostMapping(){
return "this is post mapping example";
}
- 브라우저에 직접 주소를 입력해서 이동하는 것은 HTTP GET메서드라고 간주합니다. 따라서 /sample/post-mapping경로는 GET 요청을 받아들이지 않기 때문에 오류가 발생합니다.
@RestController
- @Controller어노테이션과 @ResponseBody어노테이션을 합쳐놓은 것이 @RestController 입니다.
- 이전과 다르게 @Mapping어노테이션에 @ResponseBody 어노테이션이 없습니다.
@RestController
public class SampleRestController {
@GetMapping("/rest")
public String index() {
return "this is rest";
}
@GetMapping("/rest/now")
public LocalDateTime now() {
return LocalDateTime.now();
}
}
@RequestMapping을 클래스에 사용하기
- @RequestMapping은 메서드 뿐만 아니라 클래스에도 사용할 수 있습니다.
- 클래스에 사용하면 각 메서드에 공통된 URL을 쓸 수 있습니다.
@RestController
@RequestMapping(value="/class/request")
public class SampleClassRequestMapping {
@GetMapping("/")
public String index() {
return "this is sample class Request Mapping";
}
@GetMapping("/now")
public LocalDateTime now() {
return LocalDateTime.now();
}
}
728x90
반응형
'Backend > SpringBoot' 카테고리의 다른 글
logback-spring.xml으로 파일 로그 남기기 (0) | 2023.01.30 |
---|---|
DB초기화 및 마이그레이션 (0) | 2023.01.30 |
하이버네이트란? (0) | 2023.01.29 |
스프링 로그 라이브러리(Slf4j) (0) | 2023.01.29 |
롬복(lombok) 라이브러리 (1) | 2023.01.29 |