package com.baidu.dsp.common.controller; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.BeansException; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.validation.BindException; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.servlet.ModelAndView; import com.baidu.dsp.common.constant.ErrorCode; import com.baidu.dsp.common.constant.WebConstants; import com.baidu.dsp.common.utils.ParamValidateUtils; import com.baidu.dsp.common.vo.JsonObjectBase; import com.baidu.dsp.common.vo.JsonObjectUtils; import com.baidu.ub.common.db.DaoPageResult; /** * @author liaoqiqi * @version 2013-11-26 */ public class BaseController implements ApplicationContextAware { protected ApplicationContext context; public void setApplicationContext(ApplicationContext arg0) throws BeansException { this.context = arg0; } /** * OK:非列表数据 * * @param key * @param value * * @return */ protected <T> JsonObjectBase buildSuccess(String key, T value) { return JsonObjectUtils.buildObjectSuccess(key, value); } /** * OK:非列表数据 * * @param value * * @return */ protected <T> JsonObjectBase buildSuccess(T value) { return JsonObjectUtils.buildSimpleObjectSuccess(value); } /** * OK: 列表数据 * * @param value * @param totalCount * @param <T> * * @return */ protected <T> JsonObjectBase buildListSuccess(List<?> value, int totalCount) { return JsonObjectUtils.buildListSuccess(value, totalCount, null); } /** * OK: 列表数据 * * @param data * @param <T> * * @return */ protected <T> JsonObjectBase buildListSuccess(DaoPageResult<T> data) { return JsonObjectUtils.buildListSuccess(data.getResult(), data.getTotalCount(), data.getFootResult()); } /** * 错误:参数错误 * * @param field * @param message * * @return */ protected JsonObjectBase buildParamError(String field, String message, ErrorCode errorCode) { Map<String, String> map = new HashMap<String, String>(); map.put(field, message); if (errorCode == null) { return JsonObjectUtils.buildFieldError(map, ErrorCode.FIELD_ERROR); } return JsonObjectUtils.buildFieldError(map, errorCode); } /** * 错误:参数错误 * * @param bindingResult * * @return */ protected JsonObjectBase buildFieldError(BindingResult bindingResult, ErrorCode errorCode) { Map<String, String> errors = new HashMap<String, String>(); for (Object object : bindingResult.getAllErrors()) { if (object instanceof FieldError) { FieldError fieldError = (FieldError) object; String message = fieldError.getDefaultMessage(); errors.put(fieldError.getField(), message); } } if (errorCode == null) { return JsonObjectUtils.buildFieldError(errors, ErrorCode.FIELD_ERROR); } return JsonObjectUtils.buildFieldError(errors, errorCode); } /** * 错误:全局的 * * @param message * * @return */ protected JsonObjectBase buildGlobalError(String message, ErrorCode errorCode) { return JsonObjectUtils.buildGlobalError(message, errorCode); } /** * 绑定时间 * * @param binder */ @InitBinder protected void dateBinder(WebDataBinder binder) { // The date format to parse or output your dates SimpleDateFormat dateFormat = new SimpleDateFormat(WebConstants.TIME_FORMAT); // Create a new CustomDateEditor CustomDateEditor editor = new CustomDateEditor(dateFormat, true); // Register it as custom editor for the Date type binder.registerCustomEditor(Date.class, editor); } /* * Bind出错,这里是最高优先级的处理 */ @ExceptionHandler({BindException.class}) public ModelAndView handleBindException(final BindException e) { return ParamValidateUtils.getParamErrors(e); } }