切換語言為:簡體

Spring 的 @InitBinder 註解作用及應用場景

  • 爱糖宝
  • 2024-06-21
  • 2061
  • 0
  • 0

InitBinder註解,用於初始化 WebDataBinder。這通常在業務控制器中使用,以便在資料繫結到模型物件之前對請求引數進行預處理,例如格式化日期或自定義屬性編輯器。

業務場景:

假設你正在開發一個線上預訂系統,使用者需要輸入日期和其他資訊來預訂服務。你希望確保所有接收到的日期引數都符合特定的格式,並且在使用者沒有輸入日期時提供一個預設值。

1. 建立自定義屬性編輯器:

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.util.Date;

public class DatePropertyEditor extends PropertyEditorSupport {
    private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        try {
            setValue(dateFormat.parse(text));
        } catch (ParseException e) {
            throw new IllegalArgumentException("Invalid date format: " + text, e);
        }
    }
}


2. 使用 @InitBinder 註解初始化 WebDataBinder

import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.stereotype.Controller;

@Controller
public class BookingController {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        // 註冊自定義屬性編輯器
        binder.registerCustomEditor(Date.class, new DatePropertyEditor());
    }

    // 控制器的其他方法...
}


在這個控制器中,@InitBinder 註解的 initBinder 方法用於註冊一個自定義的 DatePropertyEditor,它將被用來解析和格式化日期引數。

3. 控制器處理預訂請求:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@PostMapping("/booking")
public String handleBooking(@RequestParam("bookingDate") Date bookingDate, BookingForm bookingForm) {
    // 使用 bookingDate 和 bookingForm 中的資料來處理預訂邏輯
    // 由於使用了 @InitBinder,bookingDate 已經被格式化為期望的 Date 型別
    return "bookingConfirmation";
}


4. 表單 HTML:

<form action="/booking" method="post">
    <label for="bookingDate">Booking Date:</label>
    <input type="text" id="bookingDate" name="bookingDate" required>
    <button type="submit">Book Now</button>
</form>


總結:

  • @InitBinder 允許開發者在資料繫結到模型之前對請求引數進行預處理,提高了資料的準確性和應用程式的健壯性。

  • 使用自定義屬性編輯器,可以自定義如何處理特定型別的資料,例如日期、貨幣或電話號碼。

  • 透過集中初始化 WebDataBinder,可以簡化控制器程式碼,避免在每個方法中重複相同的初始化邏輯。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.