@RequestMapping
URL을 Request(요청)하면 어떤 method로 처리할지 Mapping한다. Controller나, Controller method에 적용.
Request받는 형식인 Get, Post, Patch, Put, Delete 정의.
정의하지 않는다면 자동으로 Get 설정.
모든 Mapping 정보는 Spring에서 제공하는 HandlerMapping Class가 가짐.
(이하 GetMapping, PostMapping, DeleteMapping, PutMapping, PatchMapping은 기존 사용하던 RequestMapping에 속성을 지정하기 보다 더 간단히 사용 가능하도록 Spring 4.3 ver.부터 출시된 Annotation.)
@GetMapping
@RequestMapping(Method=RequestMethod.GET)과 같다.
Get은 어떤 정보를 가져와서 조회하기 위해 사용하는 방식.
HTTP GET Request를 처리하는 Method를 Mapping.
Method(URL)에 따라 어떤 Page를 보여 줄지 결정하는 역할.
@GetMapping("/join")
public void join() {
// join.jsp page를 보여 준다.
}
Login을 요청할 시 이 Get 방식으로 정보를 가져오면, URL은 localhost:8080/member/login?id=user01&pw=1111 식의 page를 가져오게 되는데, id key에 대해 user01이라는 value와 pw key에 대해 1111이라는 value를 전송하고 이 같은 정보가 노출이 되기 때문에 보안에 취약하다.
다만 Caching이 가능하여 빠른 처리가 가능하다. 한 번 접근 후, 다시 요청할 때 register에 저장한 data를 빠르게 접근.
@PostMapping
@RequestMapping(Method=RequestMethod.Post)와 같다.
Data를 Server로 제출하여 추가, 수정하기 위해 사용하는 방식.
Get은 URL에 data를 붙여 전송하나 Post는 Body에 전송한다. Client에서 Page를 요청하고 Loading하는 시간 존재.
Caching이 불가능하나 기본적으로 보안을 지킬 수 있다.
@Transactional
Transaction이란, '거래'를 의미. 어떤 작업에서 오류 발생했을 때 오류 이전의 작업으로 되돌리는 것.
DB의 상태를 변경하는 작업이나 한번에 실행돼야 하는 작업들을 의미.
해당 annotation은 begin, commit 자동 수행하고 예외 발생 시 rollback 자동 수행
Transaction의 4가지 성질
1) 원자성(Atomicity): 한 transaction 내의 실행 작업들은 하나의 단위로 처리. 모두 성공 or 모두 실패
2) 일관성(Consistency): 일관성 있는 DB 상태 유지(data integrity 만족 등)
3) 격리성(Isolation): 동시에 실행되는 transaction들이 서로 영향을 미치지 않도록 격리해야 함.
4) 영속성(Durability): Transaction을 성공하면 결과가 항상 저장되어야 함.
@ResponseBody
method return 값이 view를 통해 출력되지 않고 HTTP Response Body에 쓰이게 됨.
해당 code를 그대로 쓰면 return 값 Hello.jsp를 찾고, 해당 file이 존재하지 않을 시 500 error 발생.
View page가 아닌 문자열을 그대로 반환하기 위해 해당 annotation을 사용하면 return 값을 Client에 반환함.
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return "hello";
}
}
@RestController
Controller+ResponseBody를 추가하여 json data를 반환하는 목적.
@RequestParam
@GetMapping
public String viewName(@RequestParam("name") String name){
/*
하나 이상의 type을 적용할 수 있다.
requestParam은 하나 이상의 parameter에서 사용 가능.
*/
}
Client가 요청한 URL의 query parameter
에 대한 값을 받는다.
@RequestParam("실제값") String 설정할변수이름 식으로 표현.
***RequestParam에 key 값이 존재하지 않는다면 400번 error 발생.
***PostMapping일 때는 Form tag에서 method가 POST이면 @RequestParam으로 값을 받을 수 있다.
추가 예정
'Web > Spring' 카테고리의 다른 글
[Spring] Controller와 RestController의 차이 (0) | 2022.06.14 |
---|---|
[Spring] file upload 관련 기능 (0) | 2022.04.11 |
[Spring] UriComponentsBuilder란? (0) | 2022.03.29 |
[Spring] VO, DTO, DAO, Entity 정리 (0) | 2022.03.21 |
[Spring] 초기 setting (0) | 2022.02.08 |