SpringFramework에서 사용자 메시지를 처리하고자 합니다.
즉, 업무적 메시지를 view로 던지기 위한 방법 중
가장 심플한 방법이 뭐가 있는지 여러분들의 의견을 듣고 싶습니다.
제가 처리한 방법은
요청한 request가 들어오면 업무로직이 타다가, 업무적으로 사용자에게
이건 불가하다는 메시지를 보내기 위해서 사용자 Exception을 만들어 사용합니다.
BizException을 만들어서 코드값을 셋팅해서 업무로직 중에 던지는 겁니다.
그러면 controller 단에서 잡아서 코드값을 세팅해서 다시 view로 던져서 메시지 출력을 하는 것입니다.
물론, Tx은 Service단에서 BizException일 경우는 록백을 CommitBizException 처리를 하고
Controller단으로 넘겨져 옵니다.
근데 문제는 이게 모든 Controller에 다 나와야 중복 코딩되어야 한다는 거죠 ㅋ
예를 한번 보시죠
try {
userMgr.createUser(user);
mav.setViewName("zz/userMgr/UserRM");
mav.addObject("user", userMgr.findUser(user));
mav.addObject("messageCode", "ZZ.INF.001");
mav.addObject("messageArguments", user.getUserId());
mav.addObject("messageArgumentSeparator", ",");
<!-- 항상추가되는 부분 시작 -->
} catch(BizException be) {
mav.setViewName("zz/userMgr/UserCM");
mav.addObject("messageCode", be.getMessageCode());
mav.addObject("messageArguments", be.getMessageArguments());
mav.addObject("messageArgumentSeparator",
be.getMessageArgumentSeparator());
}
<!-- 항상추가되는 부분 끝 -->
어떻게 하는게 좋을까요? AOP를 써도 적절하지 않고,
intercepter도 안맞고
어떤게 좋을까요?
여러분들의 고견을 듣고 싶습니다.
그리고,,, 해피뉴 이어예요 ㅋㅋ
--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.
BlackBerry® 에서 보냈습니다.
--
try {
} catch(BizException be) {
mav.setViewName("zz/userMgr/UserCM");
mav.addObject("messageCode", be.getMessageCode());
mav.addObject("messageArguments", be.getMessageArguments());
mav.addObject("messageArgumentSeparator", be.getMessageArgumentSeparator());
}
--
만약 MultiActionController가 아니라 모든 Controller가 한가지 request만
처리한다면 Controller에 특정 interface를 구현하도록해서 예외 발생시 실행
할 코드 중 바뀌는 부분을 넣어두면 될 것 같습니다.
예를 들어 이런 인터페이스를 하나 만들고요.
public interface ExceptionModelAndViewProvider {
public ModelAndView getExceptionModelAndView(HttpServletRequest
request, HttpServletResponse response, Exception exception);
}
모든 Controller가 이 인터페이스를 구현하고 예외 발생시 반환할
ModelAndView를 만들어 반환하게 합니다.
...
return new ModelAndView().setViewName("zz/UserMgr/UserCM");
....
그리고 ExceptionResolver에서 handler가 이 인터페이스를 구현한 놈이라면
해당 메소드를 호출해서 ModelAndView를 얻고 공통적으로 처리해야 할 로직을
거쳐 해당 view로 분기하도록 하면 될 것 같습니다.
인터페이스의 매개변수로 ModelAndView를 넘겨주는 것도 좋고 진짜 바뀌는 부
분이 view 뿐이라면 아애 view만 반환하는 간략한 인터페이스를 만들어도 될
것 같네요.