成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Spring Boot FeignClient 如何捕獲業(yè)務(wù)異常信息

瀏覽:112日期:2023-07-05 10:19:01
Spring Boot FeignClient 捕獲業(yè)務(wù)異常信息

因項(xiàng)目重構(gòu)采用spring cloud,feign不可避免。目前spring cloud在國(guó)內(nèi)還不是很成熟,所以踩坑是免不了的。最近處理全局異常的問(wèn)題,搜了個(gè)遍也沒(méi)找到合適的解決方案

1.全局異常處理

import com.bossien.common.comm.entity.ResponseDto;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;@ControllerAdvicepublic class GlobalExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * @Author: lixg * @Description: 系統(tǒng)異常捕獲處理 */ @ResponseBody @ExceptionHandler(value = Exception.class) public ResponseDto errorExceptionHandler(Exception ex) {//APIResponse是項(xiàng)目中對(duì)外統(tǒng)一的出口封裝,可以根據(jù)自身項(xiàng)目的需求做相應(yīng)更改logger.error('捕獲到 Exception 異常', ex);//異常日志入庫(kù)return new ResponseDto(ResponseDto.RESPONSE_FAIL, '系統(tǒng)繁忙,請(qǐng)稍后再試'); } /** * @Author: lixg * @Description: 自定義異常捕獲處理 */ @ResponseBody @ExceptionHandler(value = BusinessException.class)//BusinessException是自定義的一個(gè)異常 public ResponseDto businessExceptionHandler(BusinessException ex) {logger.error('捕獲到 BusinessException 異常: code=' + ex.getCode() + ' , errorMessage=' + ex.getErrorMessage());return new ResponseDto(ex.getCode(), ex.getErrorMessage()); }}2.請(qǐng)求參數(shù)解析handler

import com.alibaba.fastjson.JSONObject;import com.ocean.common.comm.entity.ResponseDto;import com.ocean.common.core.exception.BusinessException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/*** * @author lixg * * feign請(qǐng)求響應(yīng)對(duì)象處理 */public class ResponseHandler { private final static Logger logger = LoggerFactory.getLogger(ResponseHandler.class); /** * 解析請(qǐng)求響應(yīng)對(duì)象 * @param responseDto * @param clazz * @return * @throws BusinessException */ public static Object getResponseData(ResponseDto responseDto, Class clazz) throws BusinessException {if(EmptyUtil.isEmpty(responseDto)){ throw new BusinessException(BusinessException.OBJECT_IS_NULL,'請(qǐng)求響應(yīng)為空!');}if(ResponseDto.RESPONSE_SUCCESS.equals(responseDto.getCode())){ try {String json = JSONObject.toJSONString(responseDto.getData());return JSONObject.parseObject(json, clazz); }catch (Exception e){logger.error('響應(yīng)對(duì)象轉(zhuǎn)換異常:'+clazz.getName(),e);throw new BusinessException(BusinessException.OBJECT_IS_NULL,'響應(yīng)對(duì)象轉(zhuǎn)換失敗!'); }}else{ throw new BusinessException(responseDto.getCode(),responseDto.getMessage());} }}3.業(yè)務(wù)feign接口

package com.bossien.usercenter.user.feign;import com.bossien.common.comm.entity.ResponseDto;import com.bossien.common.comm.util.PageModel;import com.bossien.common.comm.constant.SearchEntity;import com.bossien.common.core.exception.BusinessException;import com.bossien.usercenter.user.entity.User;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.stereotype.Repository;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import java.util.List;import java.util.Map;@FeignClient(value='bossien-usercenter-service',path = '/userFeign')@Repositorypublic interface UserFeign { @RequestMapping(value = 'getUserInfo',method = RequestMethod.GET) User getUserInfo(@RequestParam('userId') Long userId); @RequestMapping(value = 'getUserInfoByTicket',method = RequestMethod.GET) ResponseDto getUserInfoByTicket(@RequestParam('ticket') String ticket) throws BusinessException; }總結(jié):

@controllerAdvice或者HandlerExceptionResolver是不能直接捕獲到FeignException,所以需要在Feign層面拿到具體異常重新封裝。最后總算把cloud service內(nèi)部的異常安全(一樣的錯(cuò)誤碼、一樣的錯(cuò)誤信息)送給了client!!

Feign調(diào)用異常處理

consumer服務(wù)調(diào)用Producer服務(wù)接口時(shí),提示一下異常

no suitable HttpMessageConverter found for request type

feign.codec.EncodeException: Could not write request: no suitable HttpMessageConverter found for request type [com.xxx.pojo.Xxx] and content type [application/x-www-form-urlencoded] at org.springframework.cloud.openfeign.support.SpringEncoder.encode(SpringEncoder.java:143) ~[spring-cloud-openfeign-core-2.1.0.RELEASE.jar:2.1.0.RELEASE] at feign.ReflectiveFeign$BuildEncodedTemplateFromArgs.resolve(ReflectiveFeign.java:372) ~[feign-core-10.1.0.jar:na] at feign.ReflectiveFeign$BuildTemplateByResolvingArgs.create(ReflectiveFeign.java:224) ~[feign-core-10.1.0.jar:na] at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:74) ~[feign-core-10.1.0.jar:na] at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:106) ~[feign-hystrix-10.1.0.jar:na] at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302) ~[hystrix-core-1.5.18.jar:1.5.18] at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298) ~[hystrix-core-1.5.18.jar:1.5.18] at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.2.0.jar:1.2.0] at rx.Observable.unsafeSubscribe(Observable.java:10151) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) ~[rxjava-1.2.0.jar:1.2.0] at rx.Observable.unsafeSubscribe(Observable.java:10151) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.2.0.jar:1.2.0] at rx.Observable.unsafeSubscribe(Observable.java:10151) ~[rxjava-1.2.0.jar:1.2.0] at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94) ~[rxjava-1.2.0.jar:1.2.0] at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:56) ~[hystrix-core-1.5.18.jar:1.5.18] at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:47) ~[hystrix-core-1.5.18.jar:1.5.18] at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction.call(HystrixContexSchedulerAction.java:69) ~[hystrix-core-1.5.18.jar:1.5.18] at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) ~[rxjava-1.2.0.jar:1.2.0] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_221] at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_221] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_221] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_221] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_221]異常原因

如字面意思:

at org.springframework.cloud.openfeign.support.SpringEncoder.encode

缺少HttpMessageConverter 的編碼器

解決方法

缺少那就加進(jìn)去

將SpringFormEncoder加入到容器中

import feign.codec.Encoder;import feign.form.spring.SpringFormEncoder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.context.annotation.Scope;/** * @author jianming * @create 2021-02-06-15:42 */@Configurationpublic class FeignSupportConfig { @Bean @Primary @Scope('prototype') public Encoder multipartFormEncoder() {return new SpringFormEncoder(); }}

問(wèn)題處理完成

Consumer的Feign使用

處理需要上述的編碼器,還需在接口中指定ContentType

@Service@FeignClient(value = 'XXX-XXX')public interface LoginService { /** * 指定contentType */ @PostMapping(value = '/register', consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public MsgUtils create(User user);}

Producer正常編寫(xiě)即可!以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美a级片一区| 夜夜嗨网站十八久久| 久久一留热品黄| 欧美国产精品| 成人免费一区二区三区视频 | 一本综合精品| 日韩精品亚洲专区| 日韩一区二区三区视频在线观看| 99在线视频精品| 综合激情网...| 久久精品123| 国产91对白在线观看九色| 久久麻豆一区二区| 国产精品夜夜夜一区二区三区尤| 美国十次综合导航| 精品福利一区二区三区免费视频| 国产精品sss| 图片区小说区国产精品视频| 日韩亚洲欧美综合| 欧美日韩一区二区三| 亚洲成人1区2区| 欧美一区二区黄色| 狠狠综合久久av一区二区老牛| 亚洲成人黄色小说| 欧美午夜电影网| 国产自产v一区二区三区c| 精品精品国产高清a毛片牛牛 | 一区二区高清视频| 午夜精品福利在线| 在线91免费看| 国产91精品精华液一区二区三区 | 中文一区一区三区高中清不卡| 亚洲精品黄色| 久久99国产精品久久99| 欧美日韩精品欧美日韩精品一| 你懂的国产精品| 天堂蜜桃91精品| 久久九九久久九九| 国产欧美日韩亚洲| 国模冰冰炮一区二区| 久久久久久久综合色一本| 9色国产精品| 懂色av一区二区三区免费观看 | 国产综合久久久久影院| 国产日韩v精品一区二区| 久久精品国产清高在天天线| 丰满放荡岳乱妇91ww| 亚洲国产精品精华液网站| 91精品国产麻豆国产自产在线 | 性久久久久久久| 91精品国产91热久久久做人人| 亚洲日本国产| 精品中文字幕一区二区| 亚洲精品久久嫩草网站秘色| 欧美午夜电影网| 一区二区三区四区五区在线| 国产在线播放一区三区四| 一级精品视频在线观看宜春院| 91麻豆精品国产91久久久使用方法 | 国产午夜三级一区二区三| 亚洲激情不卡| 97精品久久久午夜一区二区三区| 亚洲欧美在线另类| 欧美成人免费网站| 久久久噜噜噜久久狠狠50岁| 国产精品v欧美精品v日韩 | 精品国产91乱码一区二区三区| 翔田千里一区二区| 麻豆国产精品一区二区三区 | 2024国产精品视频| 欧美在线一区二区| 国外精品视频| 成人av网站在线观看免费| 亚洲成人自拍偷拍| 最新高清无码专区| 日韩欧美视频在线| 欧美色中文字幕| 中文亚洲免费| 欧美日韩在线精品一区二区三区| 精品在线亚洲视频| 亚洲综合清纯丝袜自拍| 久久影院电视剧免费观看| 欧美日韩中文一区| 久久久久看片| 亚洲欧洲精品一区二区| 欧美日韩一区在线观看视频| 国产精品456| 韩日精品视频一区| 午夜国产精品一区| 夜夜爽夜夜爽精品视频| 国产无遮挡一区二区三区毛片日本| 国产精品日本| 国产欧美日韩在线播放| 欧美理论在线| 欧美大片专区| av一本久道久久综合久久鬼色| 国产精品一二三区| 久久国产精品99精品国产| 日韩激情一二三区| 亚洲一线二线三线久久久| 亚洲丝袜另类动漫二区| 久久精品无码一区二区三区| 日韩免费视频一区二区| 你懂的国产精品永久在线| 天堂va蜜桃一区二区三区漫画版| 亚洲男人的天堂av| 欧美激情一区在线| 国产欧美一区视频| 久久精品亚洲精品国产欧美| 久久久久久久精| 日韩欧美国产一区二区三区 | 一本高清dvd不卡在线观看| 亚洲欧洲综合| 亚洲福利国产| 亚洲一区黄色| 国产日韩一区二区| 久久久久久一区二区| 久久av二区| 欧美午夜精品一区二区三区 | 在线亚洲一区观看| 久久日韩精品| 另类av一区二区| 久久精品中文| 欧美色网一区二区| 欧美日韩一区二区三区免费看| 在线播放欧美女士性生活| 精品视频一区三区九区| 91精品国产黑色紧身裤美女| 91麻豆精品国产91久久久久久久久 | 亚洲综合免费观看高清在线观看| 亚洲国产成人在线| 中文字幕在线不卡| 国产精品国产三级国产aⅴ中文 | 亚洲精品美女| 黑人一区二区| 免费毛片一区二区三区久久久| 99热这里只有精品8| 色就色 综合激情| 久久狠狠婷婷| 欧美日韩一区小说| 欧美日韩一区二区欧美激情| 精品成人在线观看| 欧美精品一区男女天堂| 亚洲欧洲韩国日本视频| 欧美激情自拍偷拍| 亚洲福利国产精品| 日韩国产在线观看一区| 国产乱码精品一区二区三区av| 国产一区二区电影| 欧美区高清在线| 在线免费日韩片| 在线区一区二视频| 欧美老年两性高潮| 国产精品天干天干在线综合| 国产精品美女久久久久久久| 香蕉影视欧美成人| 午夜精品视频一区| 国产91丝袜在线播放九色| 欧美激情日韩| 亚洲专区一区二区三区| 欧美一区二区三区男人的天堂| 国产三级欧美三级日产三级99| 国产精品高潮呻吟| 国产精品另类一区| 亚洲不卡av一区二区三区| 成人av在线一区二区| 亚洲乱码视频| 日韩视频一区二区三区| 中文字幕亚洲电影| 激情文学综合网| 欧美日韩国产不卡在线看| 在线一区二区三区做爰视频网站| 日韩天堂在线观看| 亚洲一区二区三区四区不卡| 久久99精品网久久| 亚洲激情另类| 69久久99精品久久久久婷婷| 亚洲情趣在线观看| 午夜精品在线视频一区| 欧美国产激情| 在线欧美亚洲| 欧美va亚洲va香蕉在线 | 亚洲欧美色图小说| 国产精品69久久久久水密桃| 在线国产精品一区| 欧美精品一区男女天堂| 亚洲国产成人高清精品| 欧美福利影院| 欧美三级韩国三级日本一级| 亚洲精品一卡二卡| 高清在线成人网| 欧洲一区二区三区免费视频| 久久综合九色综合欧美亚洲| 日本欧美一区二区| 亚洲网址在线| 欧美一级欧美三级在线观看| 亚洲成在线观看| 91丨porny丨中文| 欧美久久久久久久久中文字幕| 中文字幕日韩一区二区|