를 사용하는 동안 나는 다음과 같은 추상적 인 모델 클래스를봄 - 콘크리트 모델의 검증 인터페이스
public abstract class Thing {
private String id;
private String name;
...
}
3 개 다른 모델 클래스를 가지고 그것을 확장합니다. 록, 페이퍼, 가위라고 부르 자. 종이와 예 :
public class Paper extends Thing {
private String paperFormat;
...
}
지금 구현하기 위해 다음과 같은 CRUD 관련 인터페이스가 : 여기
public interface ThingOperations {
public String addThingForm();
public String processAddThing(Thing thing, BindingResult result);
...
}
, processAddThing가() 양식 모델을 처리하는 것입니다 (addThingForm() 양식을 초기화). 이제 각 구체적인 클래스 (RockController, PaperController 및 ScissorController)와 관련된 컨트롤러를 만들고 싶다고 가정 해 보겠습니다. 예를 들어 PaperController입니다. processAddThing()
의 구현은 위의 예에서 올바르지 않습니다 :
public class PaperController implements ThingOperations {
...
@Override
@RequestMapping(value="/processAddPaper", method=RequestMethod.POST)
public String processAddThing(@Valid Paper newPaper, BindingResult result){
...
}
...
}
당신은 문제가 무엇인지를 참조하십시오. 인터페이스 사양에 따라 Thing 클래스를 모델로 검증해야합니다. 하지만 @Valid
을 newThing이라고 지정하면 newThing을 Paper 인스턴스로 캐스팅 할 수 없으므로 적절한 Service 및 DAO Hibernate 구현을 호출하여 새 Paper 레코드를 작성할 수 없습니다 .
컨트롤러 3 개에 인터페이스를 성공적으로 구현하고 관련 @Valid annotation
을 계속 적용하려면 어떻게해야합니까?