Server Validation
Spring2010. 7. 26. 19:31
Server Validation을 좀 더 효율적으로 하기 위해서,
ValidationJsonView라는 클래스를 만들었다, BindingResult 가 hasError를 가지고 있을 경우에
ValidationJsonView를 리턴 하도록 하였다.
이 경우에 에러가 발생 했을 경우를 @AfterThrowing aspect 로 처리 하도록 했는데, 에러(BindingResultException)가 발생했어도 잡지를 못하는 것이었다. 이 오류는 이 AnnotationMethodHandlerExceptionResolver 가 잡아서 처리하고 있다.
하여 전에 생각으로는
이 같은 형식으로 valid 오류가 발생 했을 경우 처리할 view(ValidationJsonView)를 만들어서 처리를 했었다..(2틀 -_-?)
좀 더 생각 해보니 custom resolver를 만들어서 처리 하는게 더 좋은 방법 이었다.
HanderExceptionResolver를 Implements 하여 ValidExceptionResolver를 만들어 보았다.
그럼 또 생각해 볼께.... -_-;;
저걸 설정 파일에다가 등록하면 모든 exception을 잡아서 저놈이 처리 하게된다.
이러면 안되!!! 나는 BindException 만 처리 하면 된다고!!!
하여 org.springframework.web.servlet.handler.SimpleMappingExceptionResolver 에서 특정 에러에 대한 resolver를 설정 할 수 있을까? 생각이 들어.. 한번 찾아 보았으나..
못 찾았다. -_-;;
그래서 예전에 만들어 놓았던 view 클래스를 사용 하기로 하였다.
validExceptionJsonView 는 MappingJacksonJsonView를 상속하여 만들었는데, 그냥 AbstractView 상속해도 되겠다.
이정도면 정리 된거야???
ValidationJsonView라는 클래스를 만들었다, BindingResult 가 hasError를 가지고 있을 경우에
ValidationJsonView를 리턴 하도록 하였다.
이 경우에 에러가 발생 했을 경우를 @AfterThrowing aspect 로 처리 하도록 했는데, 에러(BindingResultException)가 발생했어도 잡지를 못하는 것이었다. 이 오류는 이 AnnotationMethodHandlerExceptionResolver 가 잡아서 처리하고 있다.
하여 전에 생각으로는
//@ExceptionHandler(BindException.class)
public ModelAndView handleValidationException( BindException ex, HttpServletResponse response) {
logger.info(ex.getMessage());
return new ValidationJsonView(ex, response).renderError();
}
public ModelAndView handleValidationException( BindException ex, HttpServletResponse response) {
logger.info(ex.getMessage());
return new ValidationJsonView(ex, response).renderError();
}
이 같은 형식으로 valid 오류가 발생 했을 경우 처리할 view(ValidationJsonView)를 만들어서 처리를 했었다..(2틀 -_-?)
좀 더 생각 해보니 custom resolver를 만들어서 처리 하는게 더 좋은 방법 이었다.
HanderExceptionResolver를 Implements 하여 ValidExceptionResolver를 만들어 보았다.
public class ValidExceptionResolver implements HandlerExceptionResolver {
private Logger logger = LoggerFactory.getLogger(this.getClass());
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
BindException bindEx = (BindException) ex;
setScBadRequest( response);
logger.info( bindEx.getFieldErrors().get(0).toString());
logger.info("Error Fields : {}", bindEx.getFieldErrors());
return new ModelAndView( new MappingJacksonJsonView(), getErrorInfo( bindEx));
}
private ModelMap getErrorInfo( BindException bindEx) {
ModelMap model = new ModelMap();
model.addAttribute("errorType", "validError");
model.addAttribute("errorCount", bindEx.getErrorCount());
model.addAttribute("errors", bindEx.getFieldErrors());
return model;
}
private void setScBadRequest( HttpServletResponse response) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}
}
private Logger logger = LoggerFactory.getLogger(this.getClass());
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
BindException bindEx = (BindException) ex;
setScBadRequest( response);
logger.info( bindEx.getFieldErrors().get(0).toString());
logger.info("Error Fields : {}", bindEx.getFieldErrors());
return new ModelAndView( new MappingJacksonJsonView(), getErrorInfo( bindEx));
}
private ModelMap getErrorInfo( BindException bindEx) {
ModelMap model = new ModelMap();
model.addAttribute("errorType", "validError");
model.addAttribute("errorCount", bindEx.getErrorCount());
model.addAttribute("errors", bindEx.getFieldErrors());
return model;
}
private void setScBadRequest( HttpServletResponse response) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}
}
그럼 또 생각해 볼께.... -_-;;
저걸 설정 파일에다가 등록하면 모든 exception을 잡아서 저놈이 처리 하게된다.
이러면 안되!!! 나는 BindException 만 처리 하면 된다고!!!
하여 org.springframework.web.servlet.handler.SimpleMappingExceptionResolver 에서 특정 에러에 대한 resolver를 설정 할 수 있을까? 생각이 들어.. 한번 찾아 보았으나..
못 찾았다. -_-;;
그래서 예전에 만들어 놓았던 view 클래스를 사용 하기로 하였다.
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="org.springframework.validation.BindException">
validExceptionJsonView
</prop>
</props>
</property>
</bean>
<property name="exceptionMappings">
<props>
<prop key="org.springframework.validation.BindException">
validExceptionJsonView
</prop>
</props>
</property>
</bean>
validExceptionJsonView 는 MappingJacksonJsonView를 상속하여 만들었는데, 그냥 AbstractView 상속해도 되겠다.
이정도면 정리 된거야???