1、前台互動,傳遞的對象
1、前段響應類
1、一般正常responseBean.setCode(ErrorCodeEnum.正常.code);//200
2、Result對象正常
3、一般錯誤
4、錯誤資訊了,錄入,code系統錯誤
5、錯誤、枚舉code和desc錄入
6、錯誤、code,message自己填充
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.duodian.admore.core.bean;
import com.duodian.admore.enums.ErrorCodeEnum;
public class ResponseBean {
private boolean success;
private Object result = "{}";
private String message = "";
private String code = "";
private String date;
private ResponseBean() {
}
public static ResponseBean buildSuccess() {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(true);
responseBean.setCode(ErrorCodeEnum.正常.code);//200
responseBean.setDate(System.currentTimeMillis() + "");//系統事件戳
return responseBean;
}
public static ResponseBean buildSuccess(Object result) {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(true);
responseBean.setCode(ErrorCodeEnum.正常.code);
responseBean.setResult(result);
responseBean.setDate(System.currentTimeMillis() + "");
return responseBean;
}
public static ResponseBean buildFailure() {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(false);
responseBean.setCode(ErrorCodeEnum.系統錯誤.code);
responseBean.setDate(System.currentTimeMillis() + "");
return responseBean;
}
public static ResponseBean buildFailure(String message) {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(false);
responseBean.setCode(ErrorCodeEnum.系統錯誤.code);
responseBean.setMessage(message);
responseBean.setDate(System.currentTimeMillis() + "");
return responseBean;
}
public static ResponseBean buildFailure(ErrorCodeEnum errorCodeEnum) {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(false);
responseBean.setCode(errorCodeEnum.code);
responseBean.setMessage(errorCodeEnum.desc);
responseBean.setDate(System.currentTimeMillis() + "");
return responseBean;
}
public static ResponseBean buildFailure(String code, String message) {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(false);
responseBean.setCode(code);
responseBean.setMessage(message);
responseBean.setDate(System.currentTimeMillis() + "");
return responseBean;
}
get set
}
2、枚舉資訊類
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.duodian.admore.enums;
public enum ErrorCodeEnum {
正常("200", "通路正常"),
條件驗證失敗("201", "條件驗證失敗"),
參數解析失敗("202", "參數解析失敗"),
操作确認("203", "操作确認"),
邏輯錯誤("301", "邏輯錯誤"),
登入辨別過期("400", "登入辨別過期"),
強制更新("401", "強制更新"),
通路禁止("403", "通路禁止"),
頁面丢失("404", "頁面丢失"),
系統錯誤("500", "系統内部錯誤"),
未登入("204", "未登入"),
不是企業認證("205", "不是企業認證"),
UNKNOWN("999", "未知錯誤");
public String code;
public String desc;
private ErrorCodeEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public static String getDesc(String code) {
if (code != null && !"".equals(code)) {
ErrorCodeEnum[] var1 = values();
int var2 = var1.length;
for(int var3 = 0; var3 < var2; ++var3) {
ErrorCodeEnum desc = var1[var3];
if (desc.code.equals(code)) {
return desc.desc;
}
}
return UNKNOWN.desc;
} else {
return UNKNOWN.desc;
}
}
}
1、 儲存操作,
1、一般正常
2、錯誤資訊,錄入
@RequestMapping("save")
@ResponseBody
public ResponseBean save(Customer customer){
try {
customerService.saveCustomer(customer);
return ResponseBean.buildSuccess(); //一般正常
} catch (AppException e) {
return ResponseBean.buildFailure(e.getMessage()); //将報錯資訊輸入
}
}
2、查詢操作findCustomerById(Long id)
1、result的正常傳回
2、錯誤資訊,錄入
@RequestMapping("findCustomerById")
@ResponseBody
public ResponseBean findCustomerById(Long id){
try {
Customer customer = customerService.findCustomerById(id);
return ResponseBean.buildSuccess(customer);
} catch (AppException e) {
return ResponseBean.buildFailure(e.getMessage());
}
}
3、資料字典 (用到了上面的Object 對象)
1、result的正常傳回
@RequestMapping("getStatusList")
@ResponseBody
public ResponseBean getStatusList(){
try {
return ResponseBean.buildSuccess(EnumCrmUserStatus.getTypeList());
} catch (AppException e) {
return ResponseBean.buildFailure(e.getMessage());
}
}
2、枚舉如下
package com.duodian.admore.enums.customer;
import java.util.Arrays;
import java.util.List;
/**
* 類名稱:EnumCrmUserType
* 類描述:crm客戶來源
* 建立人:shiwei
* 修改人:
* 修改時間:2015/12/19 17:47
* 修改備注:
*
* @version 1.0.0
*/
public enum EnumCrmUserStatus {
潛在客戶(1,"潛在客戶"),
有意向(2,"有意向"),
失敗(3,"失敗"),
已成交(4,"已成交"),
老客戶(5,"老客戶"),
無(88,"無"),
未知(99,"未知")
;
public Integer type;
public String des;
EnumCrmUserStatus(Integer type, String des) {
this.type = type;
this.des = des;
}
public static List<EnumCrmUserStatus> getTypeList() {
return Arrays.asList(values());
}
public Integer getType() {
return type;
}
public String getDes() {
return des;
}
public static boolean checkExist(Integer type){
if(type == null) return false;
for (EnumCrmUserStatus value : EnumCrmUserStatus.values()){
if (value.type.compareTo(type) == 0){
return true;
}
}
return false;
}
public static EnumCrmUserStatus getEnumCashFlowType(Integer type){
if(type == null) return EnumCrmUserStatus.未知;
for (EnumCrmUserStatus value : EnumCrmUserStatus.values()){
if (value.type.compareTo(type) == 0){
return value;
}
}
return EnumCrmUserStatus.未知;
}
public static String getDes(Integer type){
if(type == null) return EnumCrmUserStatus.未知.des;
for (EnumCrmUserStatus value : EnumCrmUserStatus.values()){
if (value.type.compareTo(type) == 0){
return value.des;
}
}
return EnumCrmUserStatus.未知.des;
}
}
4、根據id删除
1、一般正常
2、資訊錯誤錄入
@RequestMapping("del")
@ResponseBody
public ResponseBean delCustomer(Long id){
try {
customerService.delCustomer(id);
return ResponseBean.buildSuccess();
} catch (AppException e) {
return ResponseBean.buildFailure(e.getMessage());
}
}
2、删除的正确使用方式
1、正常情況下不應該從資料庫表中直接删除,而是應該添加字段,讓它變成不可見。(這種不可見需要再查詢的時候特别 注意)
1、删除代碼,
@Override
public void delContact(Long ContactId) {
Contact Contact = ContactDAO.findOne(ContactId);
Contact.setIsVisible(Contact.DISABLE);
ContactDAO.save(Contact);
}
2、對應實體類字段
@Entity
@Table(name = "crm_contact_record")
public class Contact implements Serializable {
public static final int ENABLE = 1; //可見
public static final int DISABLE = 0; //不可見
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long adminId;
private Long customerId;
private String title;
private String contactName;
private Integer type;
private String content;
private Integer isVisible;
private Date contactTime;
private Date cdate;
3、自定義異常的使用
1、業務異常
/**
* Created by j.sh on 2015/5/9.
* 業務異常
*/
public class AppException extends RuntimeException {
private String code;
public AppException(String message) {
super(message);
this.code = ErrorCodeEnum.邏輯錯誤.code;
}
public AppException(String code,String message) {
super(message);
this.code = code;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
2、異常錯誤的枚舉值
/**
* 類名稱:ErrorCodeEnum
* 類描述:錯誤狀态枚舉值
* 建立人:qingxu
* 修改人:
* 修改時間:2015/11/5 11:27
* 修改備注:
*
* @version 1.0.0
*/
public enum ErrorCodeEnum {
正常("200","通路正常"),
條件驗證失敗("201","條件驗證失敗"),
參數解析失敗("202","參數解析失敗"),
操作确認("203","操作确認"),
邏輯錯誤("301","邏輯錯誤"),
登入辨別過期("400","登入辨別過期"),
強制更新("401","強制更新"),
通路禁止("403","通路禁止"),
頁面丢失("404","頁面丢失"),
系統錯誤("500","系統内部錯誤"),
未登入("204","未登入"),
不是企業認證("205","不是企業認證"),
UNKNOWN("999","未知錯誤")
;
public String code;
public String desc;
ErrorCodeEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public static String getDesc(String code){
if(code == null || "".equals(code)){
return ErrorCodeEnum.UNKNOWN.desc;
}
for(ErrorCodeEnum desc: ErrorCodeEnum.values()){
if(desc.code.equals(code)){
return desc.desc;
}
}
return ErrorCodeEnum.UNKNOWN.desc;
}
}
3、正确使用
@RequestMapping("config/loadDockedQuery")
@ResponseBody
public ResponseBean loadDockedQuery(Integer dockedType,String validate){
try {
AppsDockedConfigData data = appsDockedBufferService.loadAppsDockedConfigData(validate,dockedType);
return ResponseBean.buildSuccess(data);
} catch (AppException e) {
return ResponseBean.buildFailure(e.getCode(),e.getMessage());
} catch (Exception e) {
logger.error(e.getMessage(),e);
return ResponseBean.buildFailure(ErrorCodeEnum.系統錯誤);
}
}
4、js前端調用
$http.post(ctx + '/skin/enable', {
appId: item.trackId,
channelListsEnableValue: $scope.channelListsEnableValue
}).success(function (data, status) {
$scope.processing = false;
if (data.success) {
toastr.success('操作成功', '提示');
$scope.skinData();
} else {
ngDialog.alert(data.message);
}
})
.error(function (data, status) {
$scope.processing = false;
ngDialog.alert('操作失敗');
});