2024-07-06
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Spring Boot अनुप्रयोगानाम् विकासे प्रतिक्रियापरिणामानां अपवादानाञ्च निबन्धनस्य प्रकारेण परियोजनायाः परिपालनक्षमता, मापनीयता, दलसहकार्यं च महत्त्वपूर्णः प्रभावः भवति विकीर्णप्रतिसादपरिणामाः अपवादनियन्त्रणतर्कः च प्रायः अनावश्यकसङ्केतं जनयति यस्य अवगमनं परिपालनं च कठिनं भवति । अतः परियोजनायाः गुणवत्तां सुधारयितुम् एकीकृतपरिणामप्रतिगमनं एकीकृतं अपवादनियन्त्रणं च प्रमुखरणनीतिषु अन्यतमम् अस्ति ।
परिणामप्रत्यागमनस्य एकीकरणस्य अर्थः प्रायः सर्वेषां नियन्त्रकविधिषु मानकप्रतिसादस्वरूपं परिभाषितुं भवति । एतत् एकं वा अधिकं वा प्रतिक्रियासत्तावर्गं निर्माय साधयितुं शक्यते यस्मिन् स्थितिसङ्केतः, सन्देशः, दत्तांशः इत्यादीनि सामान्यक्षेत्राणि सन्ति । नियन्त्रकविधिना व्यापारतर्कं संसाधितस्य अनन्तरं एतानि क्षेत्राणि पूरयित्वा क्लायन्ट् प्रति प्रत्यागमिष्यति ।
तदनन्तरं SpringBoot मध्ये unified result return कथं प्राप्तुं शक्यते इति अवलोकयामः ।
1. सामान्यप्रतिक्रियावस्तुं परिभाषयन्तु
सामान्यप्रतिसादवस्तु रचयन्तु, सफलताविफलताप्रत्यागमनपरिदृश्यानि परिभाषयन्तु, तथा च सुनिश्चितं कुर्वन्तु यत् सामान्यप्रतिगमनवस्तु अन्तरफलके उपयुज्यते इति ।
public class ResponseResult {
private int code;
private String message;
private Object data;
public static ResponseResult success(Object data) {
ResponseResult responseResult = new ResponseResult();
responseResult.setData(data);
responseResult.setCode(ResultEnum.SUCCESS.code);
return responseResult;
}
public static ResponseResult error(ResultEnum resultEnum) {
return error(resultEnum, resultEnum.message);
}
public static ResponseResult error(ResultEnum resultEnum, String message) {
ResponseResult responseResult = new ResponseResult();
responseResult.setCode(resultEnum.code);
responseResult.setMessage(message);
return responseResult;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
2. अन्तरफलकप्रतिसादस्थितिसङ्केतं परिभाषयन्तु
स्थितिसङ्केतानां सामान्यसमूहस्य परिभाषा एकीकृतपरिणामप्रत्यागमनस्य मूलकुञ्जीषु अन्यतमम् अस्ति । एषः उपायः न केवलं एपिआइ इत्यस्य उपयोगितायां परिपालने च सुधारं करोति, अपितु ग्राहकं प्रतिक्रियादत्तांशं अधिकतया विश्लेषणं कर्तुं, संसाधितुं च सक्षमं करोति, एतत् एपिआइ-विकासकानाम् अनुसरणं कर्तुं स्पष्टं सुसंगतं च मानकं प्रदाति
public enum ResultEnum {
SUCCESS(200 ,"请求处理成功"),
SERVICE_ERROR(500, "服务器异常,请稍后重试");
public final Integer code;
public final String message;
ResultEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}
3. एकीकृतसफलताविफलतानिबन्धनविधयः परिभाषयन्तु
public class ResponseResult {
private int code;
private String message;
private Object data;
public static ResponseResult success(Object data) {
ResponseResult responseResult = new ResponseResult();
responseResult.setData(data);
responseResult.setCode(ResultEnum.SUCCESS.code);
return responseResult;
}
public static ResponseResult error(ResultEnum resultEnum) {
return error(resultEnum, resultEnum.message);
}
public static ResponseResult error(ResultEnum resultEnum, String message) {
ResponseResult responseResult = new ResponseResult();
responseResult.setCode(resultEnum.code);
responseResult.setMessage(message);
return responseResult;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
4. नियन्त्रकः परिणामेषु समानरूपेण प्रतिक्रियां ददाति
@GetMapping("/testResult")
public ResponseResult test() {
// 模拟业务逻辑
try {
// 假设这里有一些业务逻辑
return ResponseResult.success("success");
} catch (Exception e) {
// 捕获异常并返回错误信息
return ResponseResult.error(ResultEnum.SERVICE_ERROR);
}
}
एकीकृत अपवादनियन्त्रणं नियन्त्रके क्षिप्तानाम् अपवादानाम् आकर्षणं नियन्त्रयितुं च वैश्विकं अपवादनियंत्रकस्य उपयोगं करोति । एषः उपायः प्रत्येकस्मिन् नियन्त्रकविधौ द्वितीयकं अपवादनियन्त्रणसङ्केतं लेखनं परिहरति, अपवादनियन्त्रणतर्कं अधिकं केन्द्रीकृतं प्रबन्धनं च सुलभं करोति
@ विश्रामनियंत्रकपरामर्श
@RestControllerAdvice एकं संयुक्तं टिप्पणीपत्रम् अस्ति, यत् @ControllerAdvice तथा @ResponseBody इत्येतयोः संयोजनम् अस्ति । मुख्यतया नियन्त्रकस्तरस्य वैश्विकविन्यासप्रदानाय अस्य उपयोगः भवति, यथा अपवादनियन्त्रणं, दत्तांशबन्धनं, दत्तांशपूर्वसंसाधनम् इत्यादयः । यतः अस्मिन् @ResponseBody अस्ति, @RestControllerAdvice द्वारा संसाधिताः सर्वे पद्धतयः पूर्वनिर्धारितरूपेण HTTP प्रतिक्रियाशरीरे रिटर्न् मूल्यं लिखिष्यन्ति तथा च समुचितं Content-Type सेट् करिष्यन्ति ।
@ExceptionHandleर
@ExceptionHandler एनोटेशनस्य उपयोगः एकं विधिं चिह्नितुं भवति यत् नियन्त्रके क्षिप्तं अपवादं नियन्त्रयति । यदा नियन्त्रके कश्चन विधिः अपवादं क्षिपति तदा Spring @ExceptionHandler एनोटेटेड् मेथड् अन्वेषयिष्यति यत् अपवादं सम्भालितुं शक्नोति । यदि एवम्, विधिः आहूयते तस्य प्रतिक्रिया च प्रत्यागच्छति ।
सूचना
当使用@ControllerAdvice时,我们需要将@ResponseBody添加到异常处理方法上。
如果我们使用@RestControllerAdvice,就不需要添加。
1. व्यावसायिक अपवादवर्गान् परिभाषयन्तु
एकीकृतअपवादवर्गाः भवन्तं त्रुटिं अपवादं च उत्तमरीत्या प्रबन्धयितुं साहाय्यं कर्तुं शक्नुवन्ति, येन सम्पूर्णे प्रणाल्यां त्रुटिनियन्त्रणं अधिकं सुसंगतं पूर्वानुमानीयं च भवति ।
public class BusinessException extends RuntimeException{
private final ResultEnum resultEnum;
public BusinessException(ResultEnum resultEnum, String message) {
super(message);
this.resultEnum = resultEnum;
}
public BusinessException(ResultEnum resultEnum) {
this(resultEnum, resultEnum.message);
}
}
2. वैश्विक अपवादसञ्चालकः
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler({BusinessException.class})
public ResponseResult handleBusinessException(BusinessException businessException, HttpServletRequest request) {
// 想处理的业务
return ResponseResult.error(ResultEnum.SERVICE_ERROR, businessException.getMessage());
}
/**
* 其他异常
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
public ResponseResult handleOtherExceptions(Exception e) {
// 这里可以根据不同的异常类型返回不同的状态码和消息
// 但为了简单起见,这里只返回一个通用的错误信息
return ResponseResult.error(ResultEnum.SERVICE_ERROR);
}
}
3. एकीकृतप्रक्रियाकरणं उपयोगः च
@GetMapping("/testException1")
public ResponseResult test1() {
if (true) {
// 业务场景
throw new BusinessException(ResultEnum.SERVICE_ERROR);
}
return ResponseResult.success("success");
}
एकीकृत अपवादनियन्त्रणस्य उपयोगस्य लाभाः
कोड् पुनः प्रयोगः: बहुस्थानेषु समानप्रतिसादपरिणामानां अपवादनिबन्धनसङ्केतानां च लेखनं परिहरन्तु।
परिपालनं सुलभम्: यदा प्रतिक्रियास्वरूपं अपवादनियन्त्रणतर्कं वा परिवर्तयितुं आवश्यकं भवति तदा केवलं एकस्मिन् स्थाने परिवर्तनं करणीयम् ।
सामूहिक कार्य: दलस्य सदस्याः एकीकृतकोडिंगमानकान् अधिकसुलभतया अवगन्तुं अनुसरणं च कर्तुं शक्नुवन्ति।
मापनीयता: यदि भवन्तः नूतनप्रतिसादप्रकारं वा अपवादनियन्त्रणतर्कं वा योजयितुं प्रवृत्ताः सन्ति तर्हि केवलं विद्यमानानाम् विस्तारं कुर्वन्तु ।