第一版基础控制器类2020年01月09日
package com.zfxx.utils.dustbin.lingdu.lingdumodule.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.zfxx.utils.dustbin.lingdu.lingdumodule.entity.EntityClass;
@Controller
@RequestMapping("/testLingduController")
public class TestLingduController extends BaseController<EntityClass>{
}
BaseController
package com.zfxx.utils.dustbin.lingdu.lingdumodule.controller;
import java.io.Serializable;
import java.lang.reflect.Method;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.zfxx.entity.Pager;
import com.zfxx.service.BaseService;
import com.zfxx.utils.ResponseResult;
/**
* 基础控制器层抽象类<br>
* 其他控制器层可继承该抽象类<br>
* 以确保基本接口的一致性
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年11月29日下午3:11:56</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public abstract class BaseController<T extends Serializable> {
@Autowired
private BaseService<T> baseService;
/**
* 显示list页面<br>
* @param jsp 页面路径
* @return 返回页面
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年11月29日下午3:14:41</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
@RequestMapping("/list")
public String list(String jsp){
jsp="employee/list";
System.out.println("list进来了!!!!!!!!!!!!!!!!!!!!!!!!!");
return jsp;
}
/**
* ajax获取页面分页数据<br>
* @return 返回分页数据
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年11月29日下午3:15:34</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
@RequestMapping("/pager")
@ResponseBody
public Pager<T> pager(){
return (Pager<T>) baseService.getPagingData();
}
/**
* 显示新增页面<br>
* @param jsp 页面路径
* @return 返回新增页面
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年11月29日下午3:30:21</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
@RequestMapping("/add")
public String add(String jsp){
return jsp;
}
/**
* 新增数据<br>
* @param t 实体类
* @return 返回统一返回类
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年11月29日下午3:33:18</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
@ResponseBody
public ResponseResult save(T t){
return ResponseResult.rr().setMessage(baseService.save(t)==null?ResponseResult.SAVE_FAILED:ResponseResult.SAVE_SUCCESS);
}
/**
* 删除数据<br>
* @param id 数据id
* @return 返回统一返回类
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年11月29日下午3:34:38</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
@RequestMapping("/delete")
@ResponseBody
public ResponseResult delete(Long id){
return ResponseResult.rr().setMessage(baseService.delete(id)==null?ResponseResult.DELETE_FAILED:ResponseResult.DELETE_SUCCESS);
}
/**
* 显示编辑页面<br>
* @param id 数据id
* @param model 存放数据的模型
* @param jsp 页面路径
* @return 返回编辑页面
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年11月29日下午3:37:02</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
@RequestMapping("/edit")
public String edit(Long id, Model model,String jsp){
T t = baseService.getById(id);
model.addAttribute("rr",ResponseResult.rr().setMessage(t==null?ResponseResult.FAILED_TO_GET_DATA:ResponseResult.SUCCESS).setData(t));
return jsp;
}
/**
* 更新数据<br>
* @param t 实体类
* @return 返回统一返回类
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年11月29日下午3:39:28</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
@RequestMapping("/update")
@ResponseBody
public ResponseResult update(T t){
try {
Method method = t.getClass().getMethod("getId", t.getClass());
if(baseService.getById(Long.parseLong(method.invoke(t,null)+""))==null){
return ResponseResult.rr().setMessage(ResponseResult.UPDATE_FAILED_HAVE_BEEN_REMOVED);
}
} catch (Exception e) {
System.out.println("测试中。。。反射不成功");// TODO
}
return ResponseResult.rr().setMessage(baseService.update(t,null)==0?ResponseResult.UPDATE_FAILED:ResponseResult.UPDATE_SUCCESS);
}
/**
* <span style="color:red">
* 方法上加注解:@ModelAttribute<br>
* 参数格式:@RequestParam(value = "id", required = false) Long id, Map<String, Object> map<br>
* </span>
* MethodName: getUser Author: gcl date: 2019年10月11日
*
* description:有 @ModelAttribute 标记的方法, 会在每个目标方法执行之前被 SpringMVC调用!
* 能有效的防止更新的时候,没有更新的字段被替换为null的bug,更新的时候先去数据 库中查询出该对象,然后更新的字段替换.没有更新的字段不替换
*
* @param id
* @param map
*/
// @ModelAttribute
// public void getEntity(@RequestParam(value = "id", required = false) Long id, Map<String, Object> map){
//
// }
}
统一返回类
ResponseResult
package com.zfxx.utils;
import java.lang.reflect.Field;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
* <b>响应结果统一封装类</b><br><br>
* <b><span style="color:red">若调用该类定义的【成功】静态提示信息<br>
* 或提示信息中存在“成功”或“失败”的字符<br>
* 则不需要再设置状态码<br>
* 若未调用本类定义的【成功】相关静态提示信息<br>
* 且设置了自定义的【成功】相关提示信息中没有“成功”字符<br>
* 则应同步设置状态码为:1;</span></b>
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年10月17日上午8:33:26</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public class ResponseResult {
/**状态码<span style="color:red">默认为0(失败)</span>*/
private Integer state=STATE_ERR; //状态码默认为失败0
/**提示信息*/
private String message; //提示信息
/**数据*/
private Object data; //数据
/**
* 无参构造方法
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2020年1月9日上午11:10:05</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public ResponseResult() {
super();
}
/**
* 状态码构造方法
* @param state 状态码值
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2020年1月9日上午11:10:30</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public ResponseResult(Integer state) {
super();
this.state = state;
}
/**
* 状态码加提示信息构造方法
* @param state 状态码值
* @param message 提示信息
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2020年1月9日上午11:11:32</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public ResponseResult(Integer state, String message) {
super();
this.state = state;
this.message = message;
}
/**
* 状态码加数据构造方法
* @param state 状态码值
* @param data 数据
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2020年1月9日上午11:12:14</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public ResponseResult(Integer state, Object data) {
super();
this.state = state;
this.data = data;
}
/**
* 异常信息构造方法
* @param throwable 异常信息
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2020年1月9日上午11:13:08</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public ResponseResult(Throwable throwable) {
super();
this.state = STATE_ERR;
this.message = throwable.getMessage();
}
/**
* 获取一个新的ResponseResult对象
* @return 返回新的ResponseResult对象
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2020年1月9日上午11:07:45</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public static ResponseResult rr(){
return new ResponseResult();
}
/**
* <b>获取状态码</b><br>
* 顺带根据已知条件自动设置相应的状态码返回<br>
* @return 返回对应的状态码值
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年12月3日下午3:35:39</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public Integer getState() {
Class<? extends ResponseResult> c = this.getClass();
Field[] fields = c.getFields();
if(message!=null){
for (Field field : fields) {
try {
if((field.getName().contains("SUCCESS")&&message.contains((String)field.get(c)))||message.contains(SUCCESS)){
this.state=STATE_OK;break;
}else if(message.contains(FAILED)){
this.state=STATE_ERR;break;
}
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
// this.state=message.contains(DELETE_SUCCESS)?1:message.contains(IMPORT_SUCCESS)?1:message.contains(SAVE_SUCCESS)?1:message.contains(UPDATE_SUCCESS)?1:message.contains(FORBID_SUCCESS)?1:message.contains(UNFORBID_SUCCESS)?1:message.contains(RESETPASSWORD_SUCCESS)?1:state;
return state;
}
/**
* 设置状态码
* @param state 状态码值
* @return 返回当前对象
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年10月17日上午8:41:48</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public ResponseResult setState(Integer state) {
this.state = state;
return this;
}
/**
* 获取提示信息
* @return 返回提示信息
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年10月17日上午8:42:08</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public String getMessage() {
return message;
}
/**
* 设置提示信息
* @param message 提示信息
* @return 返回当前对象
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年10月17日上午8:42:52</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public ResponseResult setMessage(String message) {
this.message = message;
return this;
}
/**
* 获取数据
* @return 返回数据对象
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年10月17日上午8:43:08</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public Object getData() {
return data;
}
/**
* 设置数据
* @param data 数据对象
* <br><br><div class=lingdu>作者: <span id=a>HY∞ <a class=b href="https://blog.csdn.net/lingdu_dou">990130556@qq.com</a><span> 零<b class=b>❤</b>度</span></span><img id=d src="https://profile.csdnimg.cn/4/4/1/1_lingdu_dou"style=""><br>创建时间: <h id=c>2019年10月17日上午8:43:18</h></div><style>.lingdu{color:#f7980d}#a{font-size:15px;color:#039c09}.b{color:#8bc34a}#c{color:#2196f3}#d{float:left;border-radius:40px;width:40px;}</style>
*/
public ResponseResult setData(Object data) {
this.data = data;
return this;
}
/**成功<br>{@value}*/
public static final int STATE_OK = 1;
/**失败<br>{@value}*/
public static final int STATE_ERR = 0;
/**{@value}*/
public static final String SUCCESS = "成功";
/**{@value}*/
public static final String FAILED = "失败";
/**{@value}*/
public static final String SAVE_SUCCESS = "保存成功!";
/**{@value}*/
public static final String SAVE_FAILED = "保存失败!";
/**{@value}*/
public static final String SAVE_FAILED_ON_ACCESS = "保存失败,无新建权限";
/**{@value}*/
public static final String DELETE_SUCCESS = "删除成功!";
/**{@value}*/
public static final String DELETE_FAILED = "删除失败!";
/**{@value}*/
public static final String FAILED_TO_GET_DATA = "获取数据失败!未查询到该数据!";
/**{@value}*/
public static final String UPDATE_SUCCESS = "更新成功!";
/**{@value}*/
public static final String UPDATE_FAILED = "更新失败!";
/**{@value}*/
public static final String UPDATE_FAILED_HAVE_BEEN_REMOVED = "更新失败,该数据已被删除!";
/**{@value}*/
public static final String IMPORT_SUCCESS = "导入成功!";
/**{@value}*/
public static final String IMPORT_FAILED = "导入失败!";
/**{@value}*/
public static final String FORBID_FAILED = "禁用失败!";
/**{@value}*/
public static final String UNFORBID_FAILED = "解禁失败!";
/**{@value}*/
public static final String FORBID_SUCCESS = "禁用成功!";
/**{@value}*/
public static final String UNFORBID_SUCCESS = "解禁成功!";
/**{@value}*/
public static final String RESETPASSWORD_FAILED = "重置密码失败!";
/**{@value}*/
public static final String RESETPASSWORD_SUCCESS = "重置密码成功!";
}