ResultMap 自定义异常用法之一:简化返回值的设置

最开始的判断和返值:

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;
	}
	



}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MyBatis 中,我们可以使用 ResultMap 标签来自定义查询结果的封装规则。ResultMap 标签可以将查询结果集中的列与 Java 对象的属性进行映射,从而实现自定义的结果封装规则。 下面是一个简单的 ResultMap 的示例: ``` <resultMap id="userResultMap" type="User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> <result column="email" property="email"/> </resultMap> ``` 在这个示例中,我们定义了一个名为 userResultMapResultMap,它将查询结果集中的 id、username、password 和 email 列映射到 User 对象的 id、username、password 和 email 属性上。 在实际应用中,我们可以根据需要进行更加复杂的结果封装规则的定义,比如使用 association 和 collection 标签来定义关联对象和集合对象的映射关系等。例如: ``` <resultMap id="blogResultMap" type="Blog"> <id column="id" property="id"/> <result column="title" property="title"/> <result column="content" property="content"/> <association property="author" javaType="Author"> <id column="author_id" property="id"/> <result column="author_username" property="username"/> <result column="author_password" property="password"/> <result column="author_email" property="email"/> </association> <collection property="comments" ofType="Comment"> <id column="comment_id" property="id"/> <result column="comment_content" property="content"/> <result column="comment_author" property="author"/> </collection> </resultMap> ``` 在这个示例中,我们定义了一个名为 blogResultMapResultMap,它将查询结果集中的 id、title 和 content 列映射到 Blog 对象的 id、title 和 content 属性上;将查询结果集中的 author_id、author_username、author_password 和 author_email 列映射到 Blog 对象的 author 属性上;将查询结果集中的 comment_id、comment_content 和 comment_author 列映射到 Blog 对象的 comments 属性上。其中,author 属性是一个关联对象,comments 属性是一个集合对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值