MissingServletRequestParameterException: Required String parameter 'pName' is not present
ajax를 활용하여 form데이터를 DB에 저장하는 데 생긴 문제이다.
| DB(데이터 구조)
우선 DB에 product라는 테이블이 있다.
사진과 같이 4개의 컬럼이 있다. 하지만 no(primary key)는 auto_increment로 데이터가 insert 될 때마다 자동으로 다음 값이 들어간다.
위의 이유로 화면의 form 양식에서는 pName, pPrice, pDesc 만을 입력받는다.
@PostMapping("/")
public Map<String, Object> insert(@RequestBody Product product) {
Map<String, Object> resultMap = new HashMap<>();
System.out.println(product);
int result = service.insert(product);
if (result == 1) {
resultMap.put("success", true);
resultMap.put("data", product);
} else {
resultMap.put("success", false);
}
return resultMap;
}
따라서 이 코드처럼 product로 파라미터를 받아버리면 변수들에 값이 매핑이 안된다😢
| 1번 방법 (@RequestBody String obj)
String 으로 받은 obj를 출력해보면
{"pName":"무선충전기","pPrice":"50000","pDesc":"고속무선충전기"}
잘 들어온다.
하지만,
문자열을 조작해서 Product 컬럼 하나씩 데이터를 넣고싶지는 않았기 때문에 2번으로 간다.
| 2번 방법 (@RequestBody HashMap<String, Object> map)
map으로 데이터를 받으면 String으로 받는 것과 같이 잘 들어오고,
Product 객체 만들어서 하나씩 값을 꺼내 product에 넣어주었다.
String pName = map.get("pName").toString();
int pPrice = Integer.parseInt(map.get("pPrice").toString());
String pDesc = map.get("pDesc").toString();
Product product = new Product(pName,pPrice,pDesc);
이제 map + 하나씩 값 넣어주기 보다 더 효율적인 방법을 찾아봐야겠다.
'Back-End' 카테고리의 다른 글
[ERROR Solution] No mapping for GET (0) | 2021.10.21 |
---|---|
[Spring Framework]스프링 프레임워크란(Spring Framework)? (0) | 2021.10.20 |
[MVC패턴]MVC(Model-View-Controller)패턴이란? (0) | 2021.10.14 |
[EL&JSTL] EL(Expression Language) 사용방법 (0) | 2021.10.12 |
[EL&JSTL] EL(Expression Language)이란? EL의 개념 (0) | 2021.10.12 |