2014-02-10 104 views
0

Tomcat應用程序,我使用Spring進行依賴注入。我也使用Jersey進行其他調用,現在我需要做一些bean驗證。我發現了一些例子,如果我使用Spring MVC @RequestMapping進行其他調用,很容易。但是使用Jersey和hibernate驗證器一起變得很難看。bean驗證與Spring一起

@POST 
@Path("/addSomething") 
public void addSomething(Something something) { 

    Set<ConstraintViolation<Something>> violations = validator.validate(something); 
    if(violations.size()>0){ 
     throw new BadRequestException("illegal input"); 
    } 

    .. 
} 

這是有效的,但我需要爲每個帖子請求重複此操作。這是醜陋的。

有沒有辦法在這裏整齊地處理bean驗證?

回答

1

怎麼樣也使用contrainst組XD。

public void validateEntity(final Object object, final Class<? extends Default>... classes) 
     throws IllegalArgumentException { 
    final Set<ConstraintViolation<Object>> errors = validator.validate(object, classes); 
    if (!errors.isEmpty()) { 
     throw new IllegalArgumentException(returnErrors(errors)); 
    } 
} 


public String returnErrors(final Set<ConstraintViolation<Object>> errors) { 
    final StringBuilder builder = new StringBuilder(); 
    for (final ConstraintViolation<Object> error : errors) { 
     builder.append(error.getMessage()); 
    } 
    return builder.toString(); 
} 
+0

爲什麼我們需要最終的Class <?擴展默認> ...類? – Spring

+0

如果要傳遞組約束的列表,則所有這些都從javax.validation.groups.Default擴展而來,以防萬一您想添加組,那麼定義在哪種情況下應用哪些約束是非常有用的機制 – Koitoer

1

你可以通過具有通用驗證方法,它接受一個對象作爲參數,例如:

public static void validateBean(Object object) { 
    Set<ConstraintViolation<Object>> violations = validator.validate(object); 
    if(violations.size()>0){ 
     throw new BadRequestException("illegal input"); 
    } 
} 

有點改善它,那麼你就必須在每一個崗位方法開始打電話validateBean(someObject);

+0

它適合我。試試看,你會看到它是否適合你。 –