다음 BO가 있습니다.
@Data
public abstract class CommonBO extends BaseBO{
@NotBlank(message ="{validation.not.blank}")
@Length(max = 100)
String name;
}
@Data
@MappedSuperclass
public abstract class CommonPersist extends BasePersist {
@Column(unique = true,nullable = false)
private String name;
}
그럼 내 BaseController
public abstract class BaseController <T extends BasePersist, K extends BaseBO> {
@RequestMapping(value = "/validate", method = RequestMethod.POST)
@ResponseBody
public ValidationResponse validate(@Valid K t,
BindingResult result, Locale locale) {
ValidationResponse res = new ValidationResponse();
List<ErrorMessage> errorMessages = new ArrayList<>();
if (!result.hasErrors()) {
res.setStatus(MessageTypes.SUCCESS);
} else {
res.setStatus(MessageTypes.FAIL);
List<FieldError> allErrors = result.getFieldErrors();
errorMessages = new ArrayList<>();
for (FieldError objectError : allErrors) {
errorMessages.add(new ErrorMessage(objectError.getField(),
objectError.getDefaultMessage()));
}
}
res.setErrorMessageList(errorMessages);
return res;
}
}
마지막으로, 또 다른 추상 컨트롤러
public abstract class CommonController<T extends CommonPersist, K extends CommonBO> extends BaseController {
@Override
public ValidationResponse validate(@Valid K t, BindingResult result, Locale locale) {
ValidationResponse res = super.validate(t, result, locale);
if (res.getStatus().equalsIgnoreCase(MessageTypes.SUCCESS)) {
if (commonService.checkIfNameIsUsed(t.getName(), t.getId())) {
ErrorMessage em = new ErrorMessage("name", messageSource.getMessage("error.duplicate.is.used", null, locale));
res.getErrorMessageList().add(em);
res.setStatus(MessageTypes.FAIL);
}
}
return res;
}
}
@Override
주석은 "방법은 수퍼 클래스에서 메소드를 오버라이드 (override)하지 않는"라는 오류가 있습니다. CommonBo extends BaseBO
@Override 함수가 BaseController의 메서드를 재정의해야 한다고 생각 했습니까?
업데이트 됨
@Slaks 답변을 기반으로
public abstract class CommonController<T extends CommonPersist, K extends CommonBO> extends BaseController<T,K> {
@Override
public ValidationResponse validate(@Valid K t, BindingResult result, Locale locale) {
ValidationResponse res = super.validate(t, result, locale);
if (res.getStatus().equalsIgnoreCase(MessageTypes.SUCCESS)) {
if (commonService.checkIfNameIsUsed(t.getName(), t.getId())) {
ErrorMessage em = new ErrorMessage("name", messageSource.getMessage("error.duplicate.is.used", null, locale));
res.getErrorMessageList().add(em);
res.setStatus(MessageTypes.FAIL);
}
}
return res;
}
}
귀하의 CommonController
클래스가 확장 BaseController
하지만, 모든 유형의 매개 변수를 지정하지 않습니다 ( <...>
).
따라서 컴파일러는이를 BaseController<Object, Object>
.
메소드가 Object
매개 변수로 사용되지 않으므로 기본 유형과 일치하지 않습니다.
extends
절에 유형 매개 변수를 지정해야합니다 .
public abstract class
CommonController<T extends CommonPersist, K extends CommonBO>
extends BaseController<T,K> {
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras