import cn.org.rapid_framework.beanutils.BeanUtils;
import cn.org.rapid_framework.page.Page;
import cn.org.rapid_framework.page.PageRequest;
import com.iloosen.imall.commons.util.ConvertRegisterHelper;
import com.iloosen.imall.commons.util.PageRequestFactory;
import org.springframework.ui.ModelMap;
import org.springframework.util.Assert;
import org.springframework.util.ReflectionUtils;
import javax.servlet.http.HttpServletRequest;
/**
* 标准的rest方法列表
* <pre>
* /userinfo => index()
* /userinfo/new => _new() 注意: 不使用/userinfo/add => add()的原因是ad会被一些浏览器当做广告URL拦截
* /userinfo/{id} => show()
* /userinfo/{id}/edit => edit()
* /userinfo POST => create()
* /userinfo/{id} PUT => update()
* /userinfo/{id} DELETE => delete()
* /userinfo DELETE => batchDelete()
* </pre>
*
* @author badqiu
*/
public class BaseRestSpringController<Entity,PK> {
protected static final String CREATED_SUCCESS = "创建成功";
protected static final String UPDATE_SUCCESS = "更新成功";
protected static final String DELETE_SUCCESS = "删除成功";
static {
//注册converters
ConvertRegisterHelper.registerConverters();
}
public static void copyProperties(Object target,Object source) {
BeanUtils.copyProperties(target, source);
}
public static <T> T copyProperties(Class<T> destClass,Object orig) {
return BeanUtils.copyProperties(destClass, orig);
}
public static ModelMap toModelMap(Page page,PageRequest pageRequest) {
return toModelMap("",page, pageRequest);
}
public static ModelMap toModelMap(String tableId,Page page,PageRequest pageRequest) {
ModelMap model = new ModelMap();
saveIntoModelMap(tableId,page,pageRequest,model);
return model;
}
/**
* 用于一个页面有多个extremeTable是使用
* @param tableId 等于extremeTable的tableId属性
*/
public static void saveIntoModelMap(String tableId,Page page,PageRequest pageRequest,ModelMap model){
Assert.notNull(tableId,"tableId must be not null");
Assert.notNull(page,"page must be not null");
model.addAttribute(tableId+"page", page);
model.addAttribute(tableId+"totalRows", Integer.valueOf(page.getTotalCount()));
model.addAttribute(tableId+"pageRequest", pageRequest);
model.addAttribute(tableId+"query", pageRequest);
}
public static PageRequest bindPageRequest(HttpServletRequest request,PageRequest pageRequest,String defaultSortColumns){
return PageRequestFactory.bindPageRequest(pageRequest,request, defaultSortColumns);
}
public static <T> T getOrCreateRequestAttribute(HttpServletRequest request, String key,Class<T> clazz) {
Object value = request.getAttribute(key);
if(value == null) {
try {
value = clazz.newInstance();
} catch (Exception e) {
ReflectionUtils.handleReflectionException(e);
}
request.setAttribute(key, value);
}
return (T)value;
}
public void setSuccess(ModelMap model){
model.put("success","true");
}
public void setFailure(ModelMap model){
model.put("success","false");
}
}
分享到:
相关推荐
`Controller对请求封装和返回`这个主题主要涉及如何有效地设计和实现Controller层,以便处理来自客户端的请求,并以适当的方式返回响应数据。ControllerUtils类的引入,通常是为了提供一些通用的方法,帮助简化...
"codeigniter-base-controller-master" 是一个基于CodeIgniter的项目,它扩展了默认的控制器(Controller)类,增加了额外的功能和封装,以提升开发效率和代码复用性。 1. **CodeIgniter框架基础** CodeIgniter是...
在封装SpringMVC时,我们可以创建一个BaseController,将通用的处理逻辑如权限验证、日志记录等放入其中,以便所有继承自BaseController的控制器都能自动应用这些功能。 Mybatis则是一个轻量级的ORM(对象关系映射...
在MATLAB中,模糊逻辑工具箱(fuzzy logic toolbox)提供了创建、编辑和分析模糊系统所需的所有功能。例如,`fuzzypid.fis`文件很可能是一个已经定义好的模糊推理系统(fuzzy inference system)文件,包含了输入...
在电子设计领域,AD(Altium Designer)是一款广泛使用的电路设计软件,它集成了原理图设计、PCB布局、仿真、3D查看以及制造输出等多个功能。本压缩包中的"AD封装库"是一系列预定义的电路元件模型,用于帮助工程师...
文件"CJPAdController"可能是这个adcontroller实现的具体代码文件,包含了上述功能的实现细节。通过阅读和理解这个文件,开发者可以学习如何在自己的项目中创建类似的广告控制器,以实现广告的高效管理和展示。同时...
这个apicontroller项目兼容两者,意味着它能利用Laravel的强大功能,同时保持在Lumen环境下的高性能。 4. **Jeffrey Way的启发** Jeffrey Way是Laravel生态系统中的知名开发者和教育者,他的工作经常推动Laravel...
Camera Controller 3.26通过封装和扩展Unity的内置相机功能,使得开发者能够轻松实现复杂的相机运动和行为,如平滑移动、旋转、缩放以及视角切换。这不仅提升了游戏的视觉体验,也为玩家提供了更加沉浸式的游戏环境...
在AngularJS中,服务(Service)和控制器(Controller)是两个关键的概念,它们在构建复杂的前端应用程序时起着至关重要的作用。本示例"Angular Service Controller分层示例"旨在展示如何有效地使用这两个组件来实现...
了解STM32的引脚封装和功能分布对于设计电路至关重要。在实际应用中,需要根据项目需求选择合适的芯片型号,并合理布局PCB,确保信号完整性和电源稳定性。在设计过程中,通常会参考STM32的数据手册和参考设计,如...
TP5是中国最流行的PHP开发框架之一,它采用MVC(Model-View-Controller)架构模式,提供了丰富的功能和优秀的性能。框架的核心特性包括路由、模型、视图、控制器、数据库操作等,极大地提高了开发效率。 接下来,...
本文件主要针对iOS环境下的数据库操作进行了封装,采用了MVC(Model-View-Controller)设计模式,使得代码结构清晰,职责明确。下面将详细阐述这一封装过程中的关键知识点。 1. **SQLite数据库**:iOS中最常见的...
在这个场景下,"参数封装成对象-手动封装(非springmvc)"指的是不依赖Spring MVC框架的自动模型绑定功能,而是通过手动方式将表单提交的数据转换为Java对象。以下将详细介绍这一过程及其相关的知识点。 首先,我们...
在IT行业中,ECharts是一款由百度开发的开源JavaScript可视化库,它提供了丰富的图表类型和强大的交互功能,广泛应用于Web前端的数据展示。而将ECharts与Java后端相结合,可以实现动态数据的实时更新和高效传输,...
在SpringMVC中,用户请求的数据通常会被封装在Model中,并通过Controller返回给视图(View),最后展示给用户。而视图的作用就是将模型数据以合适的方式展示给用户。 在创建基于SpringMVC的Web应用程序时,需要在...
3. **数据传输**:驱动程序处理从应用程序到网络控制器的数据传输,包括数据包的封装、解封装,以及错误检查和纠正。 4. **中断处理**:当网络控制器接收到数据或完成一项任务时,会向CPU发送中断信号。驱动程序...
7. **命名空间(Namespace)**:为了避免类名冲突,自封装的MVC框架可能会使用PHP的命名空间功能,对不同层次的类进行组织。 8. **依赖注入(Dependency Injection)**:这是一种设计模式,有助于解耦代码,提高可...
Autium Designer是一款功能强大的PCB设计工具,提供了丰富的封装库供用户选择和自定义,以满足不同项目的需求。 这个压缩包内的文件“常用的DIP28封装库,适用于Autium Designer 的元件常用PCB封装”可能是以某种...
自动代码生成是这个项目的核心功能,它可以帮助开发者快速生成常见的Java开发组件,如Entity、Controller、ServiceImpl、Dao等。Entity类用于数据模型的表示,Controller处理HTTP请求,ServiceImpl定义业务逻辑,...
封装的`水印`类库通常包括设置水印位置、透明度、大小等功能,使得在处理大量图片时能够自动化、高效地添加水印。 `缩放`功能可能涉及到图像处理,它可以帮助调整图像的尺寸,满足不同场景的需求,如适应不同设备的...