SpringBoot 通用功能(统一回复,统一异常处理,统一配置消息 eg:消息转换器)

 

 

首先 定义统一回复对象,公用

package com.hangzhou.ad.vo;

import java.io.Serializable;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommonResponse<T> implements Serializable{
	
	private Integer code;
	private String message;
	private T dateT;
	
	public CommonResponse(Integer code, String message) {
		this.code = code;
		this.message = message;
	}
	
	
	
}

一 .统一响应服务

@RestControllerAdvice    //控制器增强,拦截响应

ResponseBodyAdvice      //接口,控制对那些响应,以及做哪些处理

package com.hangzhou.ad.advice;

import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

import com.hangzhou.ad.annotation.IgnoreResponseAdvice;
import com.hangzhou.ad.vo.CommonResponse;

/**
 * 统一回应方法
 * @author Administrator
 *
 */
@RestControllerAdvice
public class CommonResponseDateAdvice implements ResponseBodyAdvice<Object>{

	@Override
	public boolean supports(MethodParameter returnType,Class<? extends HttpMessageConverter<?>> converterType) {
			
//returnType。getDeclaringClass() 获取注解的类,判断是否被注解		if(returnType.getDeclaringClass().isAnnotationPresent(IgnoreResponseAdvice.class)) {
			return false;
		}
		
		if(returnType.getMethod().isAnnotationPresent(IgnoreResponseAdvice.class)) {
			return false;
		}
		
		return true;
	}

	@Override
	public Object beforeBodyWrite(Object body, MethodParameter returnType,
			MediaType selectedContentType,
			Class<? extends HttpMessageConverter<?>> selectedConverterType,
			ServerHttpRequest request,
			ServerHttpResponse response) {
		// TODO Auto-generated method stub
		CommonResponse<Object> commonResponse = new CommonResponse<>(0, "");
		//body统一回应的内容
		if(null==body) {
			return commonResponse;
		}else if (body instanceof CommonResponse ) {
			commonResponse = (CommonResponse<Object>) body;
		}else {
			commonResponse.setDateT(body);
		}
		
		return commonResponse;
	}
	
	
	
}

1.开发注解,给上面配置识别统一响应

/**
 * 统一回应注解
 * @author Administrator
 *
 */
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreResponseAdvice {

}

二. 统一异常回应。

/**
 * 统一回应异常
 * @author Administrator
 *
 */
@RestControllerAdvice(basePackages="com.hangzhou.controller")
public class GlobalExceptionAdvice {
	
	@ExceptionHandler(value=AdException.class)//指明处理的异常类型
	public CommonResponse<String> handlerAdException(HttpServletRequest req,AdException ex) {
		
		CommonResponse<String> response= new CommonResponse(-1, "business error");
		response.setDateT(ex.getMessage());
		return response;
	}

}

另外:可以进行异常分类定义多少handler方法,@Exceptionhandler不同的value进行分类。

package com.hangzhou.ad.exception;


/**
 * 定义一个异常,说明我异常要处理的类 
 * @author Administrator
 *
 */
public class AdException extends Exception{
	
	
	public AdException(String message) {
		super(message);
	}
	
	
	
}

 三.统一配置(消息转化器)

/**
 * 
 */
/**配置消息转换器
 * @author Administrator
 *
 */
package com.hangzhou.ad.conf;

import java.util.List;

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfiguration implements WebMvcConfigurer{

	@Override
	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
		WebMvcConfigurer.super.configureMessageConverters(converters);
		
		converters.clear();
		//添加转化器,java对象转换Json对象
		converters.add(new MappingJackson2HttpMessageConverter());
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值