Bài 6. Xử Lý Ngoại Lệ Trong Spring Boot

Поделиться
HTML-код
  • Опубликовано: 9 янв 2025

Комментарии • 69

  • @junpham-s9y
    @junpham-s9y 5 месяцев назад

    cảm ơn a nhiều. học được nhiều thứ từ anh💗

  • @lvthuong7759
    @lvthuong7759 8 месяцев назад +1

    Chia sẻ nếu các bạn thấy thắc mắc về sao anh ý viết interface cho service.
    A ý đang tuân thủ về DI. ( Phụ thuộc đảo).
    1. Nếu bạn viết 1 class UserService và inject vào controller, thì về sau bạn muốn đổi thằng userService này thì bạn sẽ phải vào controller để thay đổi => Đối với cách trên thì bạn chỉ cần impl lại các method mà interface nó nêu ra là xong. => Như thế dễ maintain.
    Ngoài ra còn ưu điểm gì nữa không thì mong a chia sẻ ạ.

    • @tayjava
      @tayjava  8 месяцев назад

      Đảm bảo tuân thủ design pattern của spring boot, và đảm bảo tính inheritance và encapsulation của java e nhé

    • @lapnghiepshopee
      @lapnghiepshopee 4 месяца назад

      con khi viet test thi ngta lai k hay impl ban ak

  • @olethanhtuan5951
    @olethanhtuan5951 9 месяцев назад +1

    Hay quá anh. Anh chuyên về backend java hay sao vậy a? Thấy mấy bài đúng mấy cái kiến thức hay

    • @tayjava
      @tayjava  9 месяцев назад +8

      Đúng rồi em, A chuyên làm backend các hệ thống siêu to khổng lồ, bảo mật cao. Hy vọng nó hữu ích với em

  • @hunghong9632
    @hunghong9632 9 месяцев назад

    Học xong playlist của sư phụ có thể đi xin việc rồi

    • @tayjava
      @tayjava  9 месяцев назад +1

      Nắm vững lý thuyết vào ko toang đấy e

  • @LeKhanhDucK17DN
    @LeKhanhDucK17DN 2 месяца назад

    dạ anh cho em hỏi handle Exception bằng Enum có phải là 1 best pratice không a

    • @tayjava
      @tayjava  2 месяца назад

      Đúng rồi e

  • @nvtmjfan
    @nvtmjfan 8 месяцев назад

    Theo mình khi đã tách method thì nên để tham số là class detail luôn để đỡ fai dùng instanceof, và vẫn cần log detail lỗi để dev backend biết chính xác lỗi ở line nào.

    • @tayjava
      @tayjava  8 месяцев назад

      Ý bác là chỉ luôn cái DTO hay Controller nào lỗi đúng ko nhỉ ? E hiểu đúng ý bác chứ !

    • @nvtmjfan
      @nvtmjfan 8 месяцев назад

      @@tayjava ko ý tôi là handle...(MethodException e, ...) chứ ko phải Exception e, ở GlobalExceptionHandler ý

    • @tayjava
      @tayjava  8 месяцев назад

      E hiểu ý bác rồi nhé !

  • @ucbui2332
    @ucbui2332 22 дня назад

    Sao em làm y vậy mà f5 lại swagger thì nó lại lỗi anh ạ. Nó ném lỗi như này ạ: NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.(java.lang.Object)'

    • @tayjava
      @tayjava  22 дня назад

      E xem source code của anh xem sao, nếu ko đc gửi link git a check cho nha

    • @nguyenson2750
      @nguyenson2750 10 дней назад

      do version đó. b thử lên version pringdoc-openapi-starter-webmvc-ui xem

    • @tayjava
      @tayjava  10 дней назад

      @@ucbui2332 nếu e dùng bản spring boot 3.3.5 trở về trước thì ko lỗi nhé! Còn từ bản 3.4 trở đi là bị lỗi e ạ! Hôm nọ s cũng bị fix mất mấy tiếng !

    • @ucbui2332
      @ucbui2332 10 дней назад

      @@tayjava Dạ em đưa về bản 3.3.5 thì xài dc rồi ạ

    • @tayjava
      @tayjava  10 дней назад

      @ okie e nha

  • @oucanh1792
    @oucanh1792 8 месяцев назад

    Dạ cho em hỏi là mình ném ra exception ở tầng service và handle ở tầng controller là chỉ là ví dụ a làm trong video này thôi hay đó là best pratices và nên áp dụng luôn ạ. Em cảm ơn ạ

    • @tayjava
      @tayjava  8 месяцев назад +1

      Best practice nhé e!

    • @oucanh1792
      @oucanh1792 8 месяцев назад

      @@tayjava Dạ em cảm ơn anh ạ

  • @naisi1387
    @naisi1387 8 месяцев назад +1

    Không có đoạn bắt lỗi ở phần enum anh nhỉ

    • @tayjava
      @tayjava  8 месяцев назад +1

      Có chứ, e xem trong file GlobalExceptioHandler ấy

    • @naisi1387
      @naisi1387 8 месяцев назад

      @@tayjava case em cảm ơn anh, nhưng mà case 1,2 không có anh ạ, case 3 trả về string thì mới có. Với cho em hỏi anh cứ implement Serializable làm gì vậy em bỏ mà nó vẫn chạy bình thường

    • @tayjava
      @tayjava  8 месяцев назад

      @@naisi1387 trong series này a có giải thích ở mấy bài rồi mà! DTO là Data Transfer Object, mỗi DTO là mô tả của 1 json data, json này truyền đi trên môi trường internet nên nó phải chuyển thành byte nhị phân mới truyền đi đc nên cần Serializable và convert từ byte thành json thì gọi là deserializable. Nôm na là thế! E đọc thêm trên mạng nhé, chát hơi mỏi tay e ạ

  • @theongtran3920
    @theongtran3920 4 месяца назад

    Hi anh, cho em hỏi 1 chút ở phần ConstraintViolationException. thì khi thay updateUser pathvariable từ 1 về 0 thì em chạy thử thì k hiện console error lên như anh? debug cũng k vào, mà để lại 1 thì vẫn update thành công. thì sao bắt đc exception đó đây anh?

    • @tayjava
      @tayjava  4 месяца назад

      E có dùng @Min(“0”) ko nhỉ ?

    • @theongtran3920
      @theongtran3920 4 месяца назад

      @@tayjava em dùng @Min(value=1, message = "xxx") e đã test đang hiểu validate khi nhập 0 vào vẫn bị bắt nhưng k đưa ra exception constraints như video thôi a. Return về 400 trên post main. Console thì k in ra gì ạ.

    • @tayjava
      @tayjava  4 месяца назад

      @@theongtran3920 có 2 giải pháp nhé
      1. E git clone code của a về để tìm hiểu xem e thiếu gì mà nó ko chạy
      2, e thắp hương xôi gà, biết đâu nó lại chạy, kaka…
      Chúc e may mắn !

    • @theongtran3920
      @theongtran3920 4 месяца назад

      @@tayjava dạ em cám ơn anh. Để e clone về nghịch. Hoặc clone hoặc custom @MinCustom @@. Cám ơn a nhiều những chia sẻ a rất hay và bổ ích. Mong anh ra nhiều video thêm ạ. Chúc a nghỉ lễ vui vẻ nhé!

    • @tayjava
      @tayjava  4 месяца назад

      Okie e nha

  • @hatiendungk15hl83
    @hatiendungk15hl83 8 месяцев назад

    Anh cho em xin hình ảnh sơ đồ của Exception đc k ạ!
    Em xin cảm ơn !

    • @tayjava
      @tayjava  8 месяцев назад

      Cho a email e ơi a gửi cho

  • @lvthuong7759
    @lvthuong7759 8 месяцев назад

    Anh đang làm ở cty nào thế a ?

    • @tayjava
      @tayjava  8 месяцев назад

      Cảm ơn e đã quan tâm! Haha..

    • @codekhongngu
      @codekhongngu 8 месяцев назад

      Công ty làm việc thì ai tiết lộ bao giờ bạn, hỏi câu tế nhị vậy

  • @KhoiNguyen-lb4lc
    @KhoiNguyen-lb4lc 2 месяца назад

    anh ơi đoạn bắt MethodArgumentNotValidException thì em nghĩ mình có thể dùng ex.getBindingResult() để bắt được tất cả các field lỗi cùng 1 lúc luôn ạ
    code:
    else if(e instanceof MethodArgumentNotValidException ex) {
    errorResponse.setError("Invalid Payload");
    Map errors = new HashMap();
    ex.getBindingResult().getAllErrors().forEach((error) -> {
    String fieldName = ((FieldError) error).getField();
    String errorMessage = error.getDefaultMessage();
    errors.put(fieldName, errorMessage);
    });
    errorResponse.setMessage(errors.toString());
    }
    output:
    "message": "{lastName=lastName must be not null, firstName=firstName must be not blank}"

    • @tayjava
      @tayjava  2 месяца назад

      Okie em, để a update chỗ đó nha

  • @VănMinhDương-n9u
    @VănMinhDương-n9u 5 месяцев назад

    hóa ra bấy lâu nay em toàn handler exception chay :_(

    • @tayjava
      @tayjava  5 месяцев назад +1

      Cái này khó lắm đấy nha, e nghiên cứu sâu mới hiểu hết đc

  • @Tienquoc112
    @Tienquoc112 Месяц назад

    Cắt chuỗi thiếu chuyên nghiệp, lấy theo object thì hay hơn

  • @thienpham3187
    @thienpham3187 8 месяцев назад

    anh có thể cho em xin file tổng hợp các exception được không ạ

    • @tayjava
      @tayjava  8 месяцев назад

      Để trong source code ấy e, phần mô tả video nhé

    • @thienpham3187
      @thienpham3187 8 месяцев назад

      @@tayjava em tìm file vẽ lý thuyết á anh

    • @tayjava
      @tayjava  8 месяцев назад

      Để lại email a gửi cho nha

  • @nvtmjfan
    @nvtmjfan 8 месяцев назад

    Mình từng thấy cách xử lý lấy message error hay hơn cắt chuỗi

    • @tayjava
      @tayjava  8 месяцев назад

      Nếu được bác share cho e với để e thử, e cũng ko thấy cách ấy hay nhưng nó dẽ làm bác ợ

    • @nvtmjfan
      @nvtmjfan 8 месяцев назад

      @@tayjava bạn cho xin file ở postman được không để tôi test và viết lại cho

    • @nvtmjfan
      @nvtmjfan 8 месяцев назад

      @@tayjava if (e instanceof MethodArgumentNotValidException) {
      /*
      int start = message.lastIndexOf("[") + 1;
      int end = message.lastIndexOf("]") - 1;
      message = message.substring(start, end);
      */
      var ret = ((MethodArgumentNotValidException) e).getBindingResult().getFieldError().getDefaultMessage();
      errorResponse.setError("Invalid Payload");
      errorResponse.setMessage(ret);
      // đây nhé thầy giáo

    • @tayjava
      @tayjava  8 месяцев назад

      @@nvtmjfan Bác cho nhà em xin cái email nhé ! Với cả source code em để phần mô tả video nha bác, Bác cứ chạy docker là có database bác nha

    • @nvtmjfan
      @nvtmjfan 8 месяцев назад

      @@tayjava code đây nha: if (e instanceof MethodArgumentNotValidException) {
      /*
      int start = message.lastIndexOf("[") + 1;
      int end = message.lastIndexOf("]") - 1;
      message = message.substring(start, end);
      */
      var ret = ((MethodArgumentNotValidException) e).getBindingResult().getFieldError().getDefaultMessage();
      errorResponse.setError("Invalid Payload");
      errorResponse.setMessage(ret);

  • @nguyenlam5439
    @nguyenlam5439 5 месяцев назад

    Anh có thể cho em xin sơ đồ exception được ko ạ. Em có gửi email cho anh rùi ạ.

    • @tayjava
      @tayjava  5 месяцев назад

      Okie em

    • @nguyenlam5439
      @nguyenlam5439 5 месяцев назад

      @@tayjava anh cho em hỏi là @ApiRespones em thấy trong sourceCode có phải mỗi khi mình khai báo function bắt 1 exception là tiêu chuẩn cần phải khai báo trước đúng không anh. Em ko thấy trong video anh đề cập đến vấn đề đấy nhưng trong source có ạ.

    • @tayjava
      @tayjava  5 месяцев назад

      @@nguyenlam5439 a ra video theo series cho nên vào danh sách phát rồi xem lại từ đầu nhé

    • @nguyenlam5439
      @nguyenlam5439 5 месяцев назад

      ​@@tayjava anh gửi em sơ đồ exception được ko ạ. Anh mới gửi phần lombook ạ.

    • @tayjava
      @tayjava  5 месяцев назад

      A chưa tìm ra là a để đâu nữa