В вашем классе контроллеров, BookCatalogController
, вы объявляете метод catalogSimple
для приема запросов, и вам следует определить маршрут. Вместо @GetMapping("Mappings.CATALOG_SIMPLE")
используйте @GetMapping("/home")
.
Хм, интересная проблема.
Если Вы собираетесь действительно проверить его, regex не будет достаточно, необходимо будет на самом деле проанализировать запись и проверить каждый из битов планирования. Поэтому каждый бит может быть числом, месяц/день недельной строки, диапазон (2-7), набор (3, 4, в субботу), ярлык стиля крона Vixie (60/5) или любая комбинация вышеупомянутого - любой единственный подход regex собирается стать очень волосатым, быстро.
Просто использование crontab
программа крона Vixie для проверки не достаточна, потому что это на самом деле не проверяет полностью! Я могу добраться crontab
принять все виды недопустимых вещей.
Злые Прохладные Сценарии оболочки Dave Taylor (книжная ссылка Google) имеют sh сценарий, который делает частичную проверку, я нашел обсуждение интересным. Вы могли бы также использовать или адаптировать код.
Я также поднял ссылки на два класса PHP, которые делают то, что Вы говорите (чье качество я не оценил):
Другой подход (в зависимости от того, что должно сделать Ваше приложение) мог бы быть должен иметь PHP, создают crontab запись программно и вставляют его, таким образом, Вы знаете, что это всегда допустимо, а не попытайтесь проверить недоверяемую строку. Затем необходимо было бы просто сделать "сборку crontab записью" UI, который мог быть простым, если Вам не нужны действительно сложные комбинации планирования.
Необходимо смочь сделать это довольно легко с regex. На самом деле я не был бы удивлен, могли ли Вы найти существующий regex для просто этого на Google. Это не тестируется, но возможно что-то как:
/^((\*)|(\d+((-\d+)|(,\d+)+))\s+){5}/
Кто сказал, что регулярные выражения не могут этого сделать?
С разрешения моего работодателя, Salir.com , вот тест PHPUnit, который выполняет такую проверку. Не стесняйтесь изменять и распространять. Буду признателен, если вы сохраните уведомление @author и ссылку на веб-сайт.
<?php
/**
* @author Jordi Salvat i Alabart - with thanks to <a href="www.salir.com">Salir.com</a>.
*/
abstract class CrontabChecker extends PHPUnit_Framework_TestCase {
protected function assertFileIsValidUserCrontab($file) {
$f= @fopen($file, 'r', 1);
$this->assertTrue($f !== false, 'Crontab file must exist');
while (($line= fgets($f)) !== false) {
$this->assertLineIsValid($line);
}
}
protected function assertLineIsValid($line) {
$regexp= $this->buildRegexp();
$this->assertTrue(preg_match("/$regexp/", $line) !== 0);
}
private function buildRegexp() {
$numbers= array(
'min'=>'[0-5]?\d',
'hour'=>'[01]?\d|2[0-3]',
'day'=>'0?[1-9]|[12]\d|3[01]',
'month'=>'[1-9]|1[012]',
'dow'=>'[0-7]'
);
foreach($numbers as $field=>$number) {
$range= "($number)(-($number)(\/\d+)?)?";
$field_re[$field]= "\*(\/\d+)?|$range(,$range)*";
}
$field_re['month'].='|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec';
$field_re['dow'].='|mon|tue|wed|thu|fri|sat|sun';
$fields_re= '('.join(')\s+(', $field_re).')';
$replacements= '@reboot|@yearly|@annually|@monthly|@weekly|@daily|@midnight|@hourly';
return '^\s*('.
'$'.
'|#'.
'|\w+\s*='.
"|$fields_re\s+\S".
"|($replacements)\s+\S".
')';
}
}