प्रौद्योगिकी साझेदारी

SpringBoot: SpringBoot एकीकृतप्रतिसादः एकीकृतः अपवादनियन्त्रणं च

2024-07-06

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

I. परिचयः

Spring Boot अनुप्रयोगानाम् विकासे प्रतिक्रियापरिणामानां अपवादानाञ्च निबन्धनस्य प्रकारेण परियोजनायाः परिपालनक्षमता, मापनीयता, दलसहकार्यं च महत्त्वपूर्णः प्रभावः भवति विकीर्णप्रतिसादपरिणामाः अपवादनियन्त्रणतर्कः च प्रायः अनावश्यकसङ्केतं जनयति यस्य अवगमनं परिपालनं च कठिनं भवति । अतः परियोजनायाः गुणवत्तां सुधारयितुम् एकीकृतपरिणामप्रतिगमनं एकीकृतं अपवादनियन्त्रणं च प्रमुखरणनीतिषु अन्यतमम् अस्ति ।

2. एकीकृत परिणाम प्रत्यागमन

परिणामप्रत्यागमनस्य एकीकरणस्य अर्थः प्रायः सर्वेषां नियन्त्रकविधिषु मानकप्रतिसादस्वरूपं परिभाषितुं भवति । एतत् एकं वा अधिकं वा प्रतिक्रियासत्तावर्गं निर्माय साधयितुं शक्यते यस्मिन् स्थितिसङ्केतः, सन्देशः, दत्तांशः इत्यादीनि सामान्यक्षेत्राणि सन्ति । नियन्त्रकविधिना व्यापारतर्कं संसाधितस्य अनन्तरं एतानि क्षेत्राणि पूरयित्वा क्लायन्ट् प्रति प्रत्यागमिष्यति ।

तदनन्तरं 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);
     }
 }

3. एकीकृत अपवादनिबन्धनम्

एकीकृत अपवादनियन्त्रणं नियन्त्रके क्षिप्तानाम् अपवादानाम् आकर्षणं नियन्त्रयितुं च वैश्विकं अपवादनियंत्रकस्य उपयोगं करोति । एषः उपायः प्रत्येकस्मिन् नियन्त्रकविधौ द्वितीयकं अपवादनियन्त्रणसङ्केतं लेखनं परिहरति, अपवादनियन्त्रणतर्कं अधिकं केन्द्रीकृतं प्रबन्धनं च सुलभं करोति

@ विश्रामनियंत्रकपरामर्श
@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");
    }

एकीकृत अपवादनियन्त्रणस्य उपयोगस्य लाभाः

कोड् पुनः प्रयोगः: बहुस्थानेषु समानप्रतिसादपरिणामानां अपवादनिबन्धनसङ्केतानां च लेखनं परिहरन्तु।

परिपालनं सुलभम्: यदा प्रतिक्रियास्वरूपं अपवादनियन्त्रणतर्कं वा परिवर्तयितुं आवश्यकं भवति तदा केवलं एकस्मिन् स्थाने परिवर्तनं करणीयम् ।

सामूहिक कार्य: दलस्य सदस्याः एकीकृतकोडिंगमानकान् अधिकसुलभतया अवगन्तुं अनुसरणं च कर्तुं शक्नुवन्ति।

मापनीयता: यदि भवन्तः नूतनप्रतिसादप्रकारं वा अपवादनियन्त्रणतर्कं वा योजयितुं प्रवृत्ताः सन्ति तर्हि केवलं विद्यमानानाम् विस्तारं कुर्वन्तु ।