Controller.md 2.7 KB

SpringMVC Controller

对象参数绑定

@FormModel 用于将前端 FORM 数据绑定到一个或多个对象
比如:

<form>
    <input name="student.name" value="Kate" />
    <input name="student.type" value="自费" />
    <input name="teacher.name" value="Gavin" />
    <input name="teacher.level" value="2" />
</form>

对应的 Controller 中

@RequestMapping(value = "/url", method=RequestMethod.POST)
@ResponseBody
public Object add(@FormModel("student") Student student, @FormModel("teacher") Teacher teacher) {

}

返回视图

  • 页面视图
    视图可以是 JSP / Freemarker / Velocity, 所以需要指明视图的后缀来确定实际使用的模板类型

    @RequestMapping(method=RequestMethod.GET)
    public Object page() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("sys/user/list.ftl");
        //modelAndView.setViewName("sys/user/list.jsp");
        //modelAndView.setViewName("sys/user/list.vm");
        return modelAndView;
    }
    
  • JSON 视图
    开发框架对后端返回的 JSON 格式做了约定

    {
    "result": 0, // 1 表示成功, 0: 表示失败
    "message": "" // 失败时的提示消息, 成功时可以忽略
    // 其它 key : value
    }
    

    后台给这个约定的结构提供了一个组装工具 com.qhiot.core.mvc.response.AjaxResponse

    @RequestMapping(value = "/jsondata", method=RequestMethod.GET)
    @ResponseBody
    public Object jsonData(HttpServletRequest request) {
        try {
            User user = ... ;
            return AjaxResponse.success() //成功
                    .put("user", user); // 压入其它数据
        } catch (ServiceException e) {
            LOGGER.error(e.getMessage(), e);
            return AjaxResponse.fail(e); // 失败, 失败消息自动从 Throwable 中提取
        }
    }
    
  • Excel 视图(导出 Excel)
    Excel 导出使用的 Jxls v2, 下面是一个导出的示例:

    @RequestMapping(value = "/excel")
    public Object exportExcel(HttpServletRequest request) {
        ModelAndView model = new ModelAndView();
        model.setViewName("sys/user/user.xlsx"); // Jxls excel 模板文件
        try {
            User user = ... ;
            model.addObject("user", user); // 压入模板中需要用到的对象或属性
            model.addObject(ExcelExportView.EXPORT_FILENAME, "用户"); //指定导出的文件名
        } catch (Exception e) {
            LOGGER.error(e.getMessage(), e);
        }
        return model;
    }
    
  • Excel 导入

数据校验

参阅 校验工具