最开始的判断和返值:
if(StringUtils.isEmpty(ybsscjModel.getUserId())){
result.setStatus("-1");
result.setErrorCode("201");
result.setErrorMessage("用户编号不能为空");
return result;
}
if(StringUtils.isEmpty(ybsscjModel.getUserName())){
result.setStatus("-1");
result.setErrorCode("201");
result.setErrorMessage("用户名不能为空");
return result;
}
......
每次每个判断都需要写重复的4行,代码累赘且繁复。
下面通过自定义异常,抛异常,捕捉异常,静态重载方法等使重复代码简化。
1.写自定义异常类CustomException.java
并继承RuntimeException,如果需要继承其他的异常,可再写一个自定义异常类。
package com.chen.exception;
/**
* 自定义异常
* @author chen
*
*/
public class CustomException extends RuntimeException {
public CustomException(String message) {
super(message);
}
}
2.抛异常
if(StringUtils.isEmpty(ybsscjModel.getUserId())){
throw new CustomException("用户编号不能为空");
}
if(StringUtils.isEmpty(ybsscjModel.getUserName())){
throw new CustomException("用户名不能为空");
}
3.捕捉异常
3.1 直接在controller类里写方法捕捉
@ExceptionHandler(CustomException.class)
@ResponseBody
private Result exceptionHandler(Exception e){
return ResultUtils.error(e.getMessage());
}
/*
@ExceptionHandler()里可以写多个异常类,如@ExceptionHandler(E1.class,E2.class,E3.class...)
*/
3.2 创建全局Controller控制类,全局捕捉异常
package com.chen.controller.intelCommunity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import com.chen.exception.CustomException;
import com.chen.model.api.Result;
import com.chen.util.ResultUtils;
/**
* 全局异常处理
* @author chen
*
*/
@ControllerAdvice
public class MyExceptionHandler {
@ExceptionHandler(CustomException.class)
@ResponseBody
private Result exceptionHandler(Exception e){
return ResultUtils.error(e.getMessage());
}
}
两个方式的所写的方法是一致的,并无差别。
4.静态方法重载
抛了异常之后,返回值依然需要设置,这里就可以通过静态方法重载来实现。
package com.chen.util;
import com.chen.model.api.Result;
/**
* Result工具类
* @author chen
*
*/
public class ResultUtils {
public static Result success(){
Result result = new Result();
result.setStatus("0");
result.setErrorMessage("成功");
return result;
}
public static Result success(String message){
Result result = new Result();
result.setStatus("0");
result.setErrorMessage(message);
return result;
}
public static Result success(String status, String message){
Result result = new Result();
result.setStatus(status);
result.setErrorMessage(message);
return result;
}
public static Result error(){
Result result = new Result();
result.setStatus("-1");
result.setErrorCode("205");
result.setErrorMessage("系统异常");
return result;
}
public static Result error(String message){
Result result = new Result();
result.setStatus("-1");
result.setErrorCode("201");
result.setErrorMessage(message);
return result;
}
public static Result error(String errorCode, String message){
Result result = new Result();
result.setStatus("-1");
result.setErrorCode(errorCode);
result.setErrorMessage(message);
return result;
}
public static Result error(String status, String errorCode, String message){
Result result = new Result();
result.setStatus(status);
result.setErrorCode(errorCode);
result.setErrorMessage(message);
return result;
}
}
最后,将打印结果展示:
//失败之一
{
"status": "-1",
"content": null,
"type": 0,
"seq": 1530854856476,
"errorCode": "201",
"errorMessage": "用户编号不能为空"
}
//成功
{
"status": "0",
"content": "推送成功",
"type": 0,
"seq": 1530855706892,
"errorCode": null,
"errorMessage": null
}
附件: result的结果实体类
package com.chen.model.app;
public class Result {
private static final long serialVersionUID = 1L;
private String status;//0为成功,1为错误
private String content;//信息
public int type;//标示符
public Long seq;//时间戳
public String errorCode;//错误码
public String errorMessage;//错误提示
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public Result() {
seq = System.currentTimeMillis();
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public Long getSeq() {
return seq;
}
public void setSeq(Long seq) {
this.seq = seq;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
附件: ResultMap
package com.unistrong.bafw.domain.api;
import java.util.HashMap;
import java.util.List;
/**
* 返回结果API Map格式
* @author 22921
*
*/
/**
* 返回结果API Map格式
* 成功:{"code":0,"msg":"推送数据成功!"}
* 失败:{"code":101,"msg":"非唯一性!"}
* {"code":201,"msg":"对应参数错误!"}
* {"code":203,"msg":"接口调用异常!"}
* {"code":204,"msg":"图片保存异常!"}
* {"code":205,"msg":"服务器异常!"}
* {"code":206,"msg":"权限不足,或未查询到该用户权限!"}
* {"code":207,"msg":"用户未登录!"}
* {"code":301,"msg":"查询数据为空"}
* {"code":302,"msg":"查询数据超出"}
* {"code":3031,"msg":"该数据已存在!"}
* {"code":3032,"msg":"该数据不存在!"}
*
* {"code":504,"msg":"请求超时,请重试!"}
*
*/
@SuppressWarnings("serial")
public class ResultMapApi extends HashMap<String, Object>{
/**
* 运行成功
* @param code 运行代码
* @param msg 提示语
* @param count 数据量总数
* @param data 数据
* @return map {code:code,msg:msg,count:count,data:data}
*/
public static ResultMapApi data(String code,String msg,int count,Object data){
ResultMapApi res = new ResultMapApi();
res.put("data", data);
res.put("code", code);
res.put("msg", msg);
res.put("count", count);
return res;
}
/**
* 运行成功
* @param code 运行代码
* @param msg 提示语
* @param data 数据
* @return map {code:code,msg:msg,data:data}
*/
public static ResultMapApi data(String code,String msg,Object data){
ResultMapApi res = new ResultMapApi();
res.put("code", code);
res.put("msg", msg);
res.put("data", data);
return res;
}
/**
* 运行成功
* @param count 数据量总数
* @param data 数据
* @return map {code:0,msg:success,count:count,data:data}
*/
public static ResultMapApi data(int count, List<?> data) {
ResultMapApi res = new ResultMapApi();
res.put("code", "0");
res.put("msg", "success");
res.put("count", count);
res.put("data", data);
return res;
}
/**
* 运行成功
* @param msg 提示语
* @param data 数据
* @return map {code:0,msg:msg,data:data}
*/
public static ResultMapApi data(String msg,Object data){
ResultMapApi res = new ResultMapApi();
res.put("code", "0");
res.put("msg", msg);
res.put("data", data);
return res;
}
/**
* 运行成功
* @param data 数据
* @return map {code:0,msg:success,data}
*/
public static ResultMapApi data(Object data){
ResultMapApi res = new ResultMapApi();
res.put("code", "0");
res.put("msg", "success");
res.put("data", data);
return res;
}
/****报错**************************************************************/
/**
* 运行报错
* @return map {code:205,msg:error}
* 示例如下:
* 成功:{"code":0,"msg":"推送数据成功!"}
* 失败:{"code":101,"msg":"非唯一性!"}
* {"code":201,"msg":"对应参数错误!"}
* {"code":203,"msg":"接口调用异常!"}
* {"code":204,"msg":"图片保存异常!"}
* {"code":205,"msg":"服务器异常!"}
* {"code":206,"msg":"权限不足,或未查询到该用户权限!"}
* {"code":207,"msg":"用户未登录!"}
* {"code":301,"msg":"查询数据为空"}
* {"code":302,"msg":"查询数据量超出"}
*
*/
public static ResultMapApi error(){
ResultMapApi res = new ResultMapApi();
res.put("code", "205");
res.put("msg", "error");
return res;
}
/**
* 运行报错
* @param msg 异常提示语
* @return {code:201,msg:msg}
* 示例如下:
* 成功:{"code":0,"msg":"推送数据成功!"}
* 失败:{"code":101,"msg":"非唯一性!"}
* {"code":201,"msg":"对应参数错误!"}
* {"code":203,"msg":"接口调用异常!"}
* {"code":204,"msg":"图片保存异常!"}
* {"code":205,"msg":"服务器异常!"}
* {"code":206,"msg":"权限不足,或未查询到该用户权限!"}
* {"code":207,"msg":"用户未登录!"}
* {"code":301,"msg":"查询数据为空"}
* {"code":302,"msg":"查询数据量超出"}
*
*/
public static ResultMapApi error(String msg){
ResultMapApi res = new ResultMapApi();
res.put("code", "205");
res.put("msg", msg);
return res;
}
/**
*
* @param code 提示码
* @param msg 异常提示语
* @return {code:code,msg:msg}
* 示例如下:
* 成功:{"code":0,"msg":"推送数据成功!"}
* 失败:{"code":101,"msg":"非唯一性!"}
* {"code":201,"msg":"对应参数错误!"}
* {"code":203,"msg":"接口调用异常!"}
* {"code":204,"msg":"图片保存异常!"}
* {"code":205,"msg":"服务器异常!"}
* {"code":206,"msg":"权限不足,或未查询到该用户权限!"}
* {"code":207,"msg":"用户未登录!"}
* {"code":301,"msg":"查询数据为空"}
* {"code":302,"msg":"查询数据量超出"}
*
*/
public static ResultMapApi error(String code,String msg){
ResultMapApi res = new ResultMapApi();
res.put("code", code);
res.put("msg", msg);
return res;
}
/****成功**************************************************************/
/**
* 运行成功
* @param code
* @param msg
* @return {code:code,msg:msg}
*/
public static ResultMapApi success(String code,String msg){
ResultMapApi res = new ResultMapApi();
res.put("code", code);
res.put("msg", msg);
return res;
}
/**
* 运行成功
* @param msg
* @return {code:0,msg:msg}
*/
public static ResultMapApi success(String msg){
ResultMapApi res = new ResultMapApi();
res.put("code", "0");
res.put("msg", msg);
return res;
}
/**
* 运行成功
* @return {code:0,msg:success}
*/
public static ResultMapApi success(){
ResultMapApi res = new ResultMapApi();
res.put("code", "0");
res.put("msg", "success");
return res;
}
}