Я не могу приступить к работе java Отражение в загрузке Spring с Controller и JdbcTemplate.
Контроллер по умолчанию выглядит следующим образом:
public class DefaultController {
private static final Logger logger = LoggerFactory.getLogger(DefaultController.class);
public JsonResponseDataModel selectOneAuto(Long id, Class<?> repository, HttpServletResponse response){
final JsonResponseDataModel result = new JsonResponseDataModel();
System.out.println("The name of class is " + repository.getName());
Method[] methods = repository.getMethods();
for (Method method : methods) {
System.out.println("Method: " + method.getName());
}
try {
//Method method = repository.getClass().getMethod("selectOne", Long.class);
Method method = repository.getClass().getDeclaredMethod("selectOne", Long.class);
method.invoke(repository, id);
logger.info("selectOneAuto : id={} ", id);
} catch (EmptyResultDataAccessException e) {
result.setEmptyResultDataAccessException("id", id.toString());
} catch (DataAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return result;
}
}
Внутри класса CompanyRepository определен метод selectOne с Длинный ввод:
@Transactional(readOnly=true)
public CompanyModel selectOne(Long id) {
CompanyModel result = null;
final String sql = "SELECT * FROM company WHERE id=?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, new CompanyRowMapper());
}
Когда я создаю новый класс «CompanyController extends DefaultController» и вызывает метод selectOneAuto:
selectOneAuto(id, new CompanyRepository().getClass(), response);
Затем он заканчивается ошибкой в строке «Метод method = репозиторий». getClass (). getDeclaredMethod ("selectOne", Long.class); "
"Java.lang.NoSuchMethodException: java.lang.Class.selectOne(java.lang.Long)"
Но для l oop внутри метода" selectOneAuto "выводится метод с именем" selectOne ". Что здесь не так?