2012-05-07 34 views
5

Tôi có mẫu đơn này với tham số yearname:mùa xuân-MVC sẽ không ràng buộc tham số yêu cầu của tôi để int

/register?year=&name=test 

Lớp học của tôi trông như thế này:

public class Organizer { 
    private String name; 
    private int year; 

điều khiển của tôi ánh xạ những hai tham số cho lớp học của tôi Organizer

@RequestMapping("/register") 
public String register(@Valid Organizer organizer, BindingResult errors... 

Vấn đề là bindi ng tham số năm để int. Spring cung cấp cho tôi lỗi

Không thể chuyển đổi giá trị thuộc tính của loại 'java.lang.String' thành loại bắt buộc 'int' cho thuộc tính 'year'; lồng nhau ngoại lệ là java.lang.IllegalArgumentException:

tôi đã tìm ra cách để thêm biên tập tài sản riêng của tôi, nhưng không bao giờ getValue() dường như được gọi là

@InitBinder 
public void binder(WebDataBinder binder) { 
    binder.registerCustomEditor(int.class, new CustomIntEditor()); 
} 

public class CustomIntEditor extends PropertyEditorSupport { 

tôi nghĩ rằng tôi sẽ có thể trả lại int giá trị 0 khi tham số năm là bất cứ điều gì khác hơn là một giá trị int (Integer.parseInt() -> bắt ngoại lệ)

@Override 
public void setAsText(String text) throws IllegalArgumentException { 

    //Some parsing and error handling 
    setValue((int)0); 
} 

Tôi muốn để có thể:

  • Đặt lĩnh vực này year để int giá trị 0

  • Tạo một thông báo lỗi tùy chỉnh: organizer.year.invalid

Trả lời

7

Thay đổi int thành Integer. Đây là một vấn đề tự động đấm bốc. Vì year trống, không thể chuyển đổi thành giá trị nguyên thủy (vì bạn chưa chỉ định giá trị mặc định).

Sau đó, bạn có thể chú thích nó @NotNull để nhận được xác thực bạn muốn.

+0

Có hiệu quả! Tôi nghĩ rằng tôi có thể tìm cách làm cho nó hoạt động chỉ với int – Tommy

+1

Tôi nghĩ rằng những gì bạn đang tìm kiếm ban đầu là 'ConversionService' (' binder.setConversionService (...) '), không phải là' CustomEditor'. Một ConversionService có thể chuyển đổi từ chuỗi thành số nguyên, thiết lập số nguyên thành 0 nếu chuỗi rỗng. Tôi thích sử dụng các loại không nguyên thủy thay vì nó làm cho toàn bộ điều tranh luận :) – pap

+0

Có, Chuyển đổi là tính năng tôi đang tìm kiếm! – Tommy

0

đầu tiên, cố gắng chạy của bạn ứng dụng trong chế độ gỡ lỗi và tìm ra dòng chính xác mà tại đó nó ném lỗi và cung cấp chi tiết chính xác
Tôi nghĩ rằng ere phải là một vấn đề với datatype của bạn (khai báo theo mẫu) Nếu bạn đang sử dụng hibernate, hãy kiểm tra lớp thực thể ngủ đông của bạn.

và kiểm tra kiểu dữ liệu của thuộc tính năm.

Các vấn đề liên quan