Menu

Monday, June 28, 2021

[Java - Spring Boot] Exception Handler ใน Spring Boot
[Java - Spring Boot] Exception Handler in Spring Boot

สำหรับ Exception Handler เราจะสร้าง class ที่ใช้ @ControllerAdvice ดังนี้
package com.example.exception;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import java.util.LinkedHashMap;

@ControllerAdvice
public class CustomExceptionHandler   {

    @ExceptionHandler(value = {ExceptionWrapper.class})(value = {exception_class.class})
    public ResponseEntity<Object> exceptionHandler(exception_class ex) {
    	// Handle specific exception then return ResponseEntity
        return new ResponseEntity(ex,HttpStatus.BAD_REQUEST);
    }
}
      
โดยที่ exception_class เป็นชื่อของ Exception Class ที่ต้อง handle 

คำอธิบายเพิ่มเติม
  • @ControllerAdvice - อนุญาตให้เรา apply เทคนิคใน class ข้างใต้มันกับทุกๆ controller ของเรา (อ่านเพิ่มเติมที่ ControllerAdvice)
  • @ExceptionHandler - ใช้เพื่อระบุว่า method ข้างใต้มันเป็น Exception handling methods (อ่านเพิ่มเติมที่ ExceptionHandler)

[Java - Spring Boot] วิธีการสร้าง JSON response สำหรับทุก controller ใน Spring Boot
[Java - Spring Boot] How to Wrap JSON Response for All Controllers in Spring Boot

หลังจากเรากำหนด @RestController ที่เหนือ class ของ controller ทำให้ object ที่ return จาก controller นั้นจะถูกแปลงไปเป็น JSON response ให้โดยอัตโนมัติ

อย่างไรก็ตาม ถ้าหากเราต้องการสร้าง template ครอบ object ที่ return จาก controller ทุกๆ controller ก่อนที่จะส่งเป็น JSON response ออกไป เรามีขั้นตอนดังนี้

  1. สร้าง Class สำหรับ JSON response template
    package com.example.model.wrapper;
    
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import org.springframework.http.HttpStatus;
    
    @JsonIgnoreProperties(ignoreUnknown = true)
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public class ResultWrapper<T> {
        @JsonProperty("code")
        private Integer code;
        @JsonProperty("status")
        private HttpStatus status;
        @JsonProperty("message")
        private String message;
        @JsonProperty("data")
        private T data = null;
    
    
        public Result(Integer code, HttpStatus status, String message) {
            this.code = code;
            this.status = status;
            this.message = message;
        }
    
        public ResultWrapper(Integer code, HttpStatus status, T data) {
            this.code = code;
            this.status = status;
            this.data = data;
        }
    }
    

Monday, June 14, 2021

[Laravel - Composer] วิธีการตั้งค่า Authentication token ของ Github ใน Composer
[Laravel - Composer] How to Set Github Authentication Token in Composer

หลังจากรัน composer install เพื่อติดตั้ง package ที่จำเป็นต้องใช้งาน แล้วได้ข้อความตามข้างล่างนี้

Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+MACHINE-NAME+2021-02-17+0532
to retrieve a token. It will be stored in "C:/Users/puthipong/AppData/Roaming/Composer/auth.json" for future use by Composer.
Token (hidden): GitHub API limit (0 calls/hr) is exhausted, could not fetch https://api.github.com/repos/test/l5-repository/contents/composer.json?ref=ce164fa72b884b4af488ff2749a171346f229c66. Create a GitHub OAuth token to go over the API rate limit. You can also wait until ? for the rate limit to reset.

สิ่งที่เราต้องทำมีดังนี้
  1. เข้าไปที่ URL ตามข้อความข้างต้น
    https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+MACHINE-NAME+2021-02-17+0532
  2. กดสร้าง token 
  3. รันคำสั่งข้างล่างนี้
    composer config --global github-oauth.github.com <token>
หมายเหตุ สำหรับข้อมูลเพิ่มเติม อ่านได้ที่ https://getcomposer.org/doc/articles/authentication-for-private-packages.md#github-oauth