-
Exception 발생해도 원하는 파라미터 return하는 방법프로그래밍 언어/자바 & 코틀린 2018. 2. 25. 21:52
실무에서 처음으로 @Transitional을 써봤다.
MariaDB에서 프로시저를 사용하라는 팀장님의 오더에 체크하는 로직을 프로시저에 넣어 구현했다.
for문을 돌면서 데이터를 insert하고 check하기 때문에 for문 중간에서 에러가 나면 전체 rollback이 필요했다.
@Transitional에서 RuntimeException이 나면 전체 rollback이 진행된다.
근데 생각해보니 Exception이 나면 아예 실행이 멈추니 에러가 발생했는데
어디서 에러가 났는지 사용자에게 alert를 띄워줄 방법이 없었다.
내가 구상한 프로세스는 각각의 에러마다 번호를 부여해 그 번호를 return하면 alert로 사용자에게 에러를 알려주려고 했다.
구글링의 결과를 참고해 구현했다.
방법은 Service단에서 exception이 나면 그것을 Controller단에서 catch해서 값을 return해주는 것이다.
RuntimeException을 상속하고 원하는 결과값을 return하는 class다.
1234567891011121314public class ValueReturnException extends RuntimeException{private static final long serialVersionUID = 1L;final Object value;public ValueException(Object value, String message) {super(message);this.value = value;}public Object getValue() {return value;}}cs Service단에서 구현한 부분이다.
결과값이 "0"이 아니면 무조건 exception을 던져서 전체 rollback을 시킨다.
123456789101112int checkResult = -1;List<Map<String,Object>> detailList = dao.getList(params);for (int i = 0; i < detailList.size(); i++) {DetailDTO detailDto = detailList.get(i);checkResult = dao.detailInfo(detailDto);if(!checkResult.equals("0")) throw new ValueReturnException(checkResult, "상세정보 저장 도중 에러가 발생했습니다.");}return checkResult;cs Service단에서 날아온 exception을 Controller단에서 캐치해 return 한다.
12345678910111213141516171819@RequestMapping(value="/pratice/examination.do")public ModelAndView insertAndcheckData(@RequestBody Map<String, Object> params, HttpServletRequest request){ModelAndView mv = new ModelAndView();Map<String, Object> result = new HashMap<>();String checkResult = "";try {result = service.insertAndcheckData(params);}catch (ValueReturnException e) {e.printStackTrace();checkResult = (String) e.getValue();result.put("checkResult", checkResult);}mv.addObject("result", result);mv.setViewName("jsonView");return mv;cs 이렇게하면 exception에러가 발생해도 원하는 결과값을 return 해줄 수가 있다!!
'프로그래밍 언어 > 자바 & 코틀린' 카테고리의 다른 글
[java]ObjectMapper를 응용해 json형태(+jsonArray)형태를 원하는 타입(혹은 클래스)형식으로 변환하기 (0) 2018.03.05 [JSP] form태그 이용해서 데이터 주고 받기 (0) 2018.03.03 서버에서 json형태로 return하는 방법. (1) 2018.01.21 ajax에서 JSON.stringify로 넘긴 파라미터를 서버에서 @RequestBody로 받기. (0) 2018.01.21 스프링에서 @RequestParam 사용 (0) 2017.12.10