Saya menggunakan Spring Boot dan Spring Rest Contoh. Dalam contoh ini, saya melewati tajuk khusus, jika nilai itu valid, titik akhir dipanggil dengan sukses, jika nilai tajuk khusus tidak benar maka saya mendapatkan respons di bawah ini, yang ingin saya bungkus untuk menunjukkannya kepada pengguna akhir menggunakan @ControllerAdvice Pengendali Pengecualian.

Catatan: Saya membaca Spring mvc - Cara memetakan semua pemetaan permintaan yang salah ke satu metode, tetapi di sini dalam kasus saya, saya mengambil keputusan berdasarkan CustomHeader.

{
    "timestamp": "2020-01-28T13:47:16.201+0000",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/employee-data/employee-codes"
}

Pengontrol

@Operation(summary = "Find Employee")
@ApiResponses(value = { @ApiResponse(code = 200, message = "SUCCESS"),
        @ApiResponse(code = 500, message = "Internal Server Error") })
@Parameter(in = ParameterIn.HEADER, description = "X-Accept-Version", name = "X-Accept-Version", 
        content = @Content(schema = @Schema(type = "string", defaultValue = "v1", 
        allowableValues = {HeaderConst.V1}, implementation = Country.class)))
@GetMapping(value = "/employees/employee-codes", headers = "X-Accept-Version=v1")
public ResponseEntity<Employees> findEmployees(
        @RequestParam(required = false) String employeeCd,
        @RequestParam(required = false) String firstName,
        @RequestParam(required = false) Integer lastName) {
    Employees response = employeeService.getEmployees(employeeCd, firstName, lastName);
    return new ResponseEntity<>(response, HttpStatus.OK);
}

Saya telah menerapkan HttpMessageNotReadableException dan HttpMediaTypeNotSupportedException dan NoHandlerFoundException, tetapi masih belum dapat menyelesaikan kesalahan ini.

Ada saran?

2
Pra_A 28 Januari 2020, 16:58

2 jawaban

Jawaban Terbaik

Saya dapat menemukan solusi untuk itu.

# Whether a "NoHandlerFoundException" should be thrown if no Handler was found to process a request.
spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false

Kode Penanganan Kesalahan:

@Override
protected ResponseEntity<Object> handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers,
        HttpStatus status, WebRequest request) {
    // custom logic here

    return handleExceptionInternal(ex, error, getHeaders(), HttpStatus.BAD_REQUEST, request);
}
0
Pra_A 9 Februari 2020, 11:55

Jika Anda menggunakan ControllerAdvice.

Melakukan hal ini:

@ControllerAdvice
public class RestResponseEntityExceptionHandler 
  extends ResponseEntityExceptionHandler {

    @ExceptionHandler(value 
      = { IllegalArgumentException.class, IllegalStateException.class })
    protected ResponseEntity<Object> handleConflict(
      RuntimeException ex, WebRequest request) {
        String bodyOfResponse = "This should be application specific";
        return handleExceptionInternal(ex, bodyOfResponse, 
          new HttpHeaders(), HttpStatus.CONFLICT, request);
    }
}
0
mdev 28 Januari 2020, 15:13