2017-04-17 17 views
0

Iは、各フォームのPOSTによって呼び出さコントローラ方式が実質的に同一であるスプリングMVC調査アプリケーションを持っていますオブジェクトは途中の各停止地点で検証されます。これは、@Validated()アノテーションに渡されるマーカーインタフェースによって指定されます。スプリングMVC @Validation

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; 
... 
} 

私の質問:どのようにすることができますマーカーインタフェース(SurveyGroupOne、SurveyGroupTwo、など)だけで、マーカーでありますメソッドをジェネリックにして、処理中のページに固有のマーカーインターフェイスを使用しますか?このような何か:

@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)); 
} 

がどのように私はもっぱらPAGENUM @PathVariable(または他のパラメータ)に基づいて@Validatedに適切なマーカーインターフェイスを渡すことができますか?

答えて

0

@Validatedは注釈であるため、コンパイル時にその引数が利用可能である必要があります。あなたはまだそれを使うことができますが、この場合、N個のメソッドがあります.Nはいくつかのステップです。 1つのステップを別のステップと区別するためには、use params argument of @PostMapping annotationを使用できます。

Validatorをコントローラに、そしてinvoke it directly with an appropriate groupを注入する必要がある別の方法もあります。

関連する問題