最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot統(tǒng)一返回json數(shù)據(jù)格式并配置系統(tǒng)異常攔截方式

 更新時(shí)間:2024年08月09日 10:26:48   作者:L若兒  
這篇文章主要介紹了springboot統(tǒng)一返回json數(shù)據(jù)格式并配置系統(tǒng)異常攔截方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot統(tǒng)一返回json格式并配置系統(tǒng)異常攔截

通常進(jìn)行前后端分離開(kāi)發(fā)時(shí)我們需要定義統(tǒng)一的json數(shù)據(jù)交互格式并對(duì)系統(tǒng)未處理異常進(jìn)行處理。

以下具體介紹在springboot中的實(shí)現(xiàn)過(guò)程,通過(guò)該章節(jié)代碼可實(shí)現(xiàn)框架統(tǒng)一異常處理,并當(dāng)后臺(tái)接口反饋類(lèi)型不為統(tǒng)一格式時(shí)能夠進(jìn)行重新包裝成統(tǒng)一格式進(jìn)行返回。

具體實(shí)現(xiàn)如下:

1、定義統(tǒng)一返回格式

public class RtnMsg{
	
	private String rtnCode;
	
	private String rtnMsg="";
	
	private Object msg;
	
	public RtnMsg(String rtnCode,String rtnMsg,Object msg){
		this.rtnCode = rtnCode;
		this.rtnMsg = rtnMsg;
		this.msg = msg;
	}
	
	public RtnMsg(String rtnCode,String rtnMsg){
		this.rtnCode = rtnCode;
		this.rtnMsg = rtnMsg;
	}
	
	public RtnMsg(){
	}

	public String getRtnCode() {
		return rtnCode;
	}

	public void setRtnCode(String rtnCode) {
		this.rtnCode = rtnCode;
	}

	public String getRtnMsg() {
		return rtnMsg;
	}

	public void setRtnMsg(String rtnMsg) {
		this.rtnMsg = rtnMsg;
	}

	public Object getMsg() {
		return msg;
	}

	public void setMsg(Object msg) {
		this.msg = msg;
	} 
	
	
	

}

2、設(shè)置常用錯(cuò)誤碼

public class RtnCode {
	
	//正常返回
	public static final String STATUS_OK = "000";
	//參數(shù)錯(cuò)誤
	public static final String STATUS_PARAM = "001";
	//接口未發(fā)現(xiàn)
	public static final String STATUS_NOFOUND = "404";
	//捕獲到異常
	public static final String STATUS_SYSERROR = "500";
}

3、定義未處理異常統(tǒng)一攔截

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * @author suntongxin
 * Create on 2017年12月12日下午1:55:12
 * All right reserved
 */
@ControllerAdvice
public class CommExceptionHandler {
	
	@ResponseBody
	@ExceptionHandler(value = Exception.class)
	public RtnMsg handle(Exception e){
		RtnMsg msg = new RtnMsg(RtnCode.STATUS_SYSERROR, "系統(tǒng)異常,異常原因:"+e.getMessage());
		return msg;
	}
	

4、注入攔截response的bean對(duì)象

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @author suntongxin
 * Create on 2017年12月12日下午1:55:27
 * All right reserved
 */
@Configuration
public class RtnMsgConfig{

	@Bean
	public ResponseBodyWrapFactoryBean getResponseBodyWrap(){
		
		return new ResponseBodyWrapFactoryBean();
		
	}
	

}

5、設(shè)置bean過(guò)濾原則

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor;
/**
 * @author suntongxin
 * Create on 2017年12月12日上午10:48:43
 * All right reserved
 */
public class ResponseBodyWrapFactoryBean implements InitializingBean{

	@Autowired
	private RequestMappingHandlerAdapter adapter;
	
	@Override
	public void afterPropertiesSet() throws Exception {
		
		List<HandlerMethodReturnValueHandler> returnValueHandlers = adapter.getReturnValueHandlers();
		List<HandlerMethodReturnValueHandler> handlers = new ArrayList(returnValueHandlers);
		decorateHandlers(handlers);
		adapter.setReturnValueHandlers(handlers);
		
		
	}
	
	
	private void decorateHandlers(List<HandlerMethodReturnValueHandler> handlers){
		
		for(HandlerMethodReturnValueHandler handler : handlers){
			if(handler instanceof RequestResponseBodyMethodProcessor){
				ResponseBodyWrapHandler decorator = new ResponseBodyWrapHandler(handler);
				int index = handlers.indexOf(handler);
				handlers.set(index, decorator);
				break;
			}
		}
		
	}

}

6、實(shí)現(xiàn)具體的統(tǒng)一json返回處理

package cn.seisys.common;

import org.springframework.core.MethodParameter;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.method.support.ModelAndViewContainer;
/**
 * @author suntongxin
 * Create on 2017年12月12日上午10:48:54
 * All right reserved
 */
public class ResponseBodyWrapHandler implements HandlerMethodReturnValueHandler{
	
	private final HandlerMethodReturnValueHandler delegate;
	
	public ResponseBodyWrapHandler(HandlerMethodReturnValueHandler delegate){
		
		this.delegate = delegate;
		
	}

	@Override
	public boolean supportsReturnType(MethodParameter returnType) {
		
		return delegate.supportsReturnType(returnType);
		
	}

	@Override
	public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer,
			NativeWebRequest webRequest) throws Exception {
		RtnMsg rtnMsg = null;
		if(returnValue instanceof RtnMsg){
			rtnMsg = (RtnMsg)returnValue;
		}else{
			rtnMsg = new RtnMsg(RtnCode.STATUS_OK,"",returnValue);
		}
		
		delegate.handleReturnValue(rtnMsg, returnType, mavContainer, webRequest);;
		
		
	}

}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中泛型使用的簡(jiǎn)單方法介紹

    Java中泛型使用的簡(jiǎn)單方法介紹

    這篇文章主要給大家介紹了關(guān)于Java中泛型使用的簡(jiǎn)單方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • SpringBoot集成Prometheus實(shí)現(xiàn)監(jiān)控的過(guò)程

    SpringBoot集成Prometheus實(shí)現(xiàn)監(jiān)控的過(guò)程

    這篇文章主要介紹了SpringBoot集成Prometheus實(shí)現(xiàn)監(jiān)控,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • java 實(shí)現(xiàn)圖片合成,并添加文字

    java 實(shí)現(xiàn)圖片合成,并添加文字

    這篇文章主要介紹了java 實(shí)現(xiàn)圖片合成,并添加文字的示例,幫助大家更好的利用Java處理圖片,感興趣的朋友可以了解下
    2020-12-12
  • Java中Collections.emptyList()的注意事項(xiàng)

    Java中Collections.emptyList()的注意事項(xiàng)

    這篇文章主要給大家介紹了關(guān)于Java中Collections.emptyList()的注意事項(xiàng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • java執(zhí)行Linux命令的方法

    java執(zhí)行Linux命令的方法

    這篇文章主要介紹了java執(zhí)行Linux命令的方法,涉及對(duì)Java中Runtime.exec()函數(shù)的應(yīng)用,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • SpringBoot自定義bean綁定實(shí)現(xiàn)

    SpringBoot自定義bean綁定實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot自定義bean綁定,最常見(jiàn)的配置綁定的場(chǎng)景,是在自定義的bean中通過(guò)@Value注解將某個(gè)屬性和對(duì)應(yīng)的配置綁定
    2022-10-10
  • 詳解Spring Boot使用redis實(shí)現(xiàn)數(shù)據(jù)緩存

    詳解Spring Boot使用redis實(shí)現(xiàn)數(shù)據(jù)緩存

    本篇文章主要介紹了詳解Spring Boot使用redis實(shí)現(xiàn)數(shù)據(jù)緩存,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • SpringBoot整合Jasypt使用自定義注解+AOP實(shí)現(xiàn)敏感字段加解密

    SpringBoot整合Jasypt使用自定義注解+AOP實(shí)現(xiàn)敏感字段加解密

    這篇文章主要為大家詳細(xì)介紹了SpringBoot整合Jasypt使用自定義注解+AOP實(shí)現(xiàn)敏感字段加解密的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下
    2025-09-09
  • Mybatis Generator自動(dòng)生成對(duì)應(yīng)文件的實(shí)現(xiàn)方法

    Mybatis Generator自動(dòng)生成對(duì)應(yīng)文件的實(shí)現(xiàn)方法

    這篇文章主要介紹了Mybatis Generator自動(dòng)生成對(duì)應(yīng)的文件的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2017-09-09
  • Java線程池ThreadPoolExecutor的使用及其原理詳細(xì)解讀

    Java線程池ThreadPoolExecutor的使用及其原理詳細(xì)解讀

    這篇文章主要介紹了Java線程池ThreadPoolExecutor的使用及其原理詳細(xì)解讀,線程池是一種多線程處理形式,處理過(guò)程中將任務(wù)添加到隊(duì)列,然后在創(chuàng)建線程后自動(dòng)啟動(dòng)這些任務(wù),線程池線程都是后臺(tái)線程,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

霸州市| 永春县| 青冈县| 岳阳市| 南投县| 潮安县| 西丰县| 松原市| 寿光市| 喜德县| 通化县| 武乡县| 巧家县| 黄大仙区| 宝山区| 织金县| 咸阳市| 迁西县| 布尔津县| 门头沟区| 延川县| 五指山市| 无锡市| 海盐县| 武乡县| 三江| 襄樊市| 潞城市| 龙陵县| 岳阳市| 浦江县| 都江堰市| 靖安县| 饶河县| 富裕县| 南康市| 长顺县| 尚义县| 山西省| 常熟市| 同仁县|