2017-04-17 60 views
0

我有一個Spring MVC的調查申請,其中以各種形式POST稱爲控制器的方法實際上是相同的:Spring MVC的@Validation與標記接口的通用控制器的方法

@PostMapping("/1") 
public String processGroupOne (
     Model model, 
     @ModelAttribute("pageNum") int pageNum, 
     @ModelAttribute(GlobalControllerAdvice.SESSION_ATTRIBUTE_NAME) @Validated(SurveyGroupOne.class) SurveyCommand surveyCommand, 
     BindingResult result) { 
    if (result.hasErrors()) { 
     LOG.debug(result.getAllErrors().toString()); 
     model.addAttribute("pageNum", pageNum); 
     return "survey/page".concat(Integer.toString(pageNum)); 
    } 
    pageNum++; 
    model.addAttribute("pageNum", pageNum); 
    return "redirect:/survey/".concat(Integer.toString(pageNum)); 
} 

唯一的區別是SurveyCommand的哪一部分對象在沿途的每個站點進行驗證。這由傳遞給@Validated()註解的標記接口指定。標記接口(SurveyGroupOne,SurveyGroupTwo等)是正義的,標記:

public interface SurveyGroupOne {} 
public interface SurveyGroupTwo {} 
... 

和它們在SurveyCommand對象適用於對象的屬性:

public class Person { 
    @NotBlank(groups = { 
        SurveyGroupTwo.class, 
        SurveyGroupThree.class}) 
    private String firstName; 
    @NotBlank(groups = { 
        SurveyGroupTwo.class, 
        SurveyGroupThree.class}) 
    private String lastName; 
... 
} 

我的問題:怎麼能我使該方法通用,仍然使用特定於正在處理的頁面的標記接口?事情是這樣的:

@PostMapping("/{pageNum}") 
public String processGroupOne (
     Model model, 
     @PathVariable("pageNum") int pageNum, 
     @ModelAttribute(GlobalControllerAdvice.SESSION_ATTRIBUTE_NAME) 
      @Validated(__what goes here??__) SurveyCommand surveyCommand, 
     BindingResult result) { 
    if (result.hasErrors()) { 
     LOG.debug(result.getAllErrors().toString()); 
     model.addAttribute("pageNum", pageNum); 
     return "survey/page".concat(Integer.toString(pageNum)); 
    } 
    pageNum++; 
    model.addAttribute("pageNum", pageNum); 
    return "redirect:/survey/".concat(Integer.toString(pageNum)); 
} 

我怎麼能僅僅通過對頁次@PathVariable(或任何其他參數)基於正確的標記接口@Validated?

回答

相關問題