공부를 하다가 가끔식 아는 개념들이 머리속에서 충돌해서 자체적 혼란을 겪을 때가 많다.
그래도 이 고비를 넘기면 다음부터 절대 헷갈리지 않으므로 오늘자 개념을 다시한번 정리한다.
SQL연동을 하다가 PathVariable과 RequestParam의 설정에 혼란을 겪었는데 코드의 문제는 url mapping 설정의 오류였다.
PathVariable
PathVariable은 설정한 그 값 자체의 value를 return하기 때문에 받아온 변수 이름과 mapping한 변수 이름이 동일해야 적용된다.
아래와 같이 PathVariable이라는 애노테이션을 사용하면 다음 mapping된 url {id}에 해당되는 부분이 int값 id로 받아와져서 다음 인터페이스 mapper로 넘겨주는 방식이다.
따라서 다음 {id}와 @pathVariable()안에 있는 값은 동일해야한다.
하지만 우리가 java에서 쓸 값의 변수이름(int id) 은 달라도 상관없다. 어차피 우리가 편의대로 사용하면 그만.
@GetMapping("/detail/{id}")
public String getbyid(@PathVariable("id")int id, Company company, Model m) {
Company com = companyMapper.getbyid(id);
m.addAttribute("com", com);
return "compdetail";
}
RequestParam
RequestParam은 스프링 전에 쓰던 request.getparameter와 개념이 똑같다고 이해하면 된다.
만약 url이 localhost/test?id=test 라면 아래와 같이 설정할 수 있다.
위와 달리 getMapping에 test밖에 들어가지 않았는데 그 이유는 다음 url ? 뒤에 올 id가 자동적으로 RequestParam에 mapping되서 String test라는 변수의 이름으로 값이 반환되기 때문이다
만약 mapping을 위와 동일한 방식으로 /test?id={id}라는 방식으로 넣어주면 오류가 난다.
*paramter가 2번 중복되어 출력되기 때문
@RequestMapping("/test")
public String getbyid(@RequestParam("id")String test, Company company, Model m) {
Company com = companyMapper.getbyid(test);
m.addAttribute("com", com);
return "compdetail";
}
'국비과정 > Spring Framework' 카테고리의 다른 글
@sessionattributes에 여러개의 키를 주기 (0) | 2022.04.12 |
---|---|
클래스 VO 설계방법 (0) | 2022.04.05 |
Transactional 애노테이션 사용방법 (0) | 2022.04.05 |
스프링프레임워크 mybatis 설정방법 (0) | 2022.03.27 |
스프링 프레임워크 기본 세팅 하는 법 + MVC 패턴 설명 (0) | 2022.03.23 |