Spring Boot FeignClient 업무 이상 정보 캡 처
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;
@ControllerAdvice
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* @Author: lixg
* @Description:
*/
@ResponseBody
@ExceptionHandler(value = Exception.class)
public ResponseDto errorExceptionHandler(Exception ex) {//APIResponse ,
logger.error(" Exception ", ex);
//
return new ResponseDto(ResponseDto.RESPONSE_FAIL, " , ");
}
/**
* @Author: lixg
* @Description:
*/
@ResponseBody
@ExceptionHandler(value = BusinessException.class)//BusinessException
public ResponseDto businessExceptionHandler(BusinessException ex) {
logger.error(" BusinessException : code=" + ex.getCode() + " , errorMessage=" + ex.getErrorMessage());
return new ResponseDto(ex.getCode(), ex.getErrorMessage());
}
}
2. 매개 변수 분석 요청 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
*/
public class ResponseHandler {
private final static Logger logger = LoggerFactory.getLogger(ResponseHandler.class);
/**
*
* @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," !");
}
if(ResponseDto.RESPONSE_SUCCESS.equals(responseDto.getCode())){
try {
String json = JSONObject.toJSONString(responseDto.getData());
return JSONObject.parseObject(json, clazz);
}catch (Exception e){
logger.error(" :"+clazz.getName(),e);
throw new BusinessException(BusinessException.OBJECT_IS_NULL," !");
}
}else{
throw new BusinessException(responseDto.getCode(),responseDto.getMessage());
}
}
}
3. 비 즈 니스 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")
@Repository
public 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;
}
결론: @ controller Advice 또는 Handler Exception Resolver 는 FeignException 을 직접 포착 할 수 없 기 때문에 Feign 차원 에서 구체 적 인 이상 을 받 아 다시 포장 해 야 합 니 다.마지막 으로 클 라 우 드 서비스 내부 의 이상 안전 (같은 오류 코드, 같은 오류 정보) 을 클 라 이언 트 에 게 보 냈 습 니 다!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.