मैं अपने आवेदन में अपवाद प्रबंधन पर काम कर रहा हूं। मेरी सेवा में मेरे पास यह तरीका है:

public Optional<Entity> getEntityById(Long id) {
    return Optional.of(EntityMapper.fromEntityToDto(repository
            .findById(id)
            .orElseThrow(() -> new EntityNotFoundException("No entry was found for" + " id: " + id))));
}

मेरे अपवाद हैंडलर में मेरे पास निम्नलिखित हैं:

@ControllerAdvice
public class ControllerAdvisor extends ResponseEntityExceptionHandler {

    @ExceptionHandler(EntityNotFoundException.class)
    public ResponseEntity<Object> handleEntityNotFoundException(EntityNotFoundException ex, WebRequest request) {

        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.NOT_FOUND, "Entity not found", ex.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);
    }
}

मैंने ऐसे उदाहरण देखे हैं जहां वे ऐसा करते हैं यहां और < a href="https://jaxenter.com/guide-to-spring-boot-rest-api-error-handling-136631.html" rel="nofollow noreferrer">यहां लेकिन मुझे ऐसा लगता है HttpStatus का दुरुपयोग। संसाधन एपीआई एंडपॉइंट है (जो ठीक है) न कि वह इकाई जो नहीं मिली थी। इस उपयोग के मामले को संभालने का सबसे अच्छा तरीका क्या होगा?


IQbrod के उत्तर के आधार पर मैंने एक अपवाद बनाया:

@ResponseStatus(value = HttpStatus.NO_CONTENT)
public class MyEntityNotFoundException extends RuntimeException {

    public MyEntityNotFoundException(String message) {
        super(message);
    }
}

जिसे मैं अब EntityNotFoundException के बजाय फेंक देता हूं

0
Alex P. 9 अक्टूबर 2020, 13:59

1 उत्तर

सबसे बढ़िया उत्तर

404 और 204 के बीच शाश्वत बहस।
आइए यहां एक उदाहरण देने का प्रयास करें। आपकी इकाई अब जादुई वस्तुओं से भरी एक box है।
Box1 : यह एक बॉक्स है जिसके अंदर एक सुंदर टट्टू है।
Box2 : यह एक खाली डिब्बा है।

आइए पहले बॉक्स सामग्री के लिए पूछें:

GET https://{URL}/v1/boxes/1/content
  • 200 (टट्टू)

अब दूसरे बॉक्स की सामग्री के बारे में पूछते हैं:

GET https://{URL}/v1/boxes/2/content
  • 204 कोई सामग्री नहीं

आइए बॉक्स n°3 के लिए पूछें (बॉक्स ही, सामग्री नहीं):

GET https://{URL}/v1/boxes/3
  • 204 कोई सामग्री नहीं, आपके भंडारण में आपको 3 नंबर वाला कोई बॉक्स नहीं मिला

आइए अब पूछें कि बॉक्स n°3 के अंदर क्या है:

GET https://{URL}/v1/boxes/3/content
  • 404 बॉक्स मौजूद नहीं है।
    यहां 404 का मतलब यह है कि संसाधन नहीं मिल सका, उपयोगकर्ता ने जांच नहीं की कि बॉक्स मौजूद है या नहीं और उसका अनुरोध बकवास है (जो मूल रूप से 4xx है)।

PS: इस विषय पर आपकी राय अलग हो सकती है, यह केवल मेरी व्याख्या है।

1
IQbrod 9 अक्टूबर 2020, 14:55