ManageModelConfig parameterAnnotation = parameter.getParameterAnnotation(ManageModelConfig.class); ModelHelper.setDefaultAndSystemFieldsValue(manageModel, currentUser,parameterAnnotation.isSetDefaultFieldsValue());
最后将我们的参数注入逻辑启动起来,这里选择在xml中配置:
再看action中的调用:只需要在参数前面增加注解@ManageModelConfig,如果需要处理默认值,则将启用默认值的选项设置成true即可,下面的实现部分完全看不到任何与业务无关的代码。
@RequestMapping(value = "/addOrUpdateUser") @ResponseBody public Map<String, Object> addOrUpdateUser(@ManageModelConfig(isSetDefaultFieldsValue=true) EmployeeDto request) { Map<String, Object> ret = new HashMap<>(); ValidateUtil.ValidateResult result= new ValidateUtil().ValidateModel(request); boolean isCreate=request.getId() == 0; try { if (isCreate) { employeeService.insert(request); } else { employeeService.updateByPrimaryKey(request); } ret.put("data", "ok"); }catch (Exception e){ ret.put("err", e.getMessage()); } return ret; }
通过自定义实现HandlerMethodArgumentResolver,来捕获ajax请求的参数,利用反射机制动态的将系统字段以及需要处理默认值的字段自动赋值,避免人工干预,起到了代码精简,逻辑干净,问题统一处理的目的。需要注意的是这些实现都是结合当前系统设计的,比如我们认为id字段>0就代表是更新操作,为空或者等于小于0就代表是创建,系统字段也是约定名称的等等。