Способ POSIX
Если вы заботитесь о переносимости, используйте пример из стандарта POSIX :
i=2
end=5
while [ $i -le $end ]; do
echo $i
i=$(($i+1))
done
Выход:
2
3
4
5
Вещи, которые не POSIX:
(( ))
без доллара, хотя это общее расширение , как указано самим POSIX .[[
. [
здесь достаточно. См. Также: В чем разница между одиночными и двойными квадратными скобками в Bash? for ((;;))
seq
(GNU Coreutils) {start..end}
и не может работать с переменными, как указано в в руководстве Bash . let i=i+1
: POSIX 7 2. Язык командного командного интерпретатора не содержит слова let
, и он не работает на bash --posix
4.3.42 i=$i+1
, но я не уверен. POSIX 7 2.6.4 Арифметическое расширение гласит: если переменная оболочки x содержит значение, которое образует действительную целочисленную константу, необязательно включающую знак «плюс» или «минус», тогда арифметические разложения «$ ((x) ) "и" $ (($ x)) "должны возвращать одно и то же значение. но чтение в буквальном смысле это не означает, что $((x+1))
расширяется, поскольку x+1
не является переменной. A @RestController
не подходит для этого. Если вам нужно вернуть разные типы ответов, используйте ResponseEntity<?>
, где вы можете явно установить код состояния.
body
из ResponseEntity
будут обрабатываться так же, как и возвращаемое значение любого @ResponseBody
аннотированного метода.
@RequestMapping(value = "/wells/{apiValue}", method = RequestMethod.GET)
public ResponseEntity<?> fetchWellData(@PathVariable String apiValue){
try{
OngardWell ongardWell = new OngardWell();
ongardWell = ongardWellService.fetchOneByApi(apiValue);
return new ResponseEntity<>(ongardWell, HttpStatus.OK);
}catch(Exception ex){
String errorMessage;
errorMessage = ex + " <== error";
return new ResponseEntity<>(errorMessage, HttpStatus.BAD_REQUEST);
}
}
Обратите внимание, что вам не нужно @ResponseBody
для метода @RequestMapping
внутри @RestController
аннотированного класса.
Идиоматическим способом было бы использовать обработчик исключений вместо перехвата исключения в обычном методе обработки запросов. Тип исключения определяет код ответа. (403 за ошибку безопасности, 500 за непредвиденные исключения платформы, что угодно)
@ExceptionHandler(MyApplicationException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleAppException(MyApplicationException ex) {
return ex.getMessage();
}
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleAppException(Exception ex) {
return ex.getMessage();
}