Вы можете использовать regex .
В вашем примере это будет:
db.stuff.find( { foo: /^bar$/i } );
Я должен сказать, хотя, может быть, вы могли бы просто (или вверху) значение на пути, а не приносить дополнительную стоимость каждый раз, когда вы его находите. Очевидно, что это не будет работать для имен людей и т. Д., Но, может быть, таких случаев, как теги.
Если учетная запись не может быть создана, вы не хотите ничего возвращать.
По крайней мере, вы хотите вернуть ответ об ошибке 400
, чтобы сообщить клиенту о проблеме.
Вы можете использовать ResponseEntity
в качестве типа возврата вашего метода для сигнализации кода ответа. Это также означает, что вам придется изменить способ возврата объекта и в успешном случае.
Вы можете изменить метод таким образом, если вы не хотите передавать конкретное сообщение об ошибке, а только код ошибки:
public ResponseEntity<EmployeeBankAccountOutputDto> createBankAccount(@ApiParam("Account data") @RequestBody final EmployeeBankAccountInputDto accountCreationDto) {
try {
return ResponseEntity.ok(service.createBankAccount(accountCreationDto));
} catch (InvalidAccountDataException ex) {
log.warn(ex.getMessage());
return ResponseEntity.badRequest();
}
}
Если вы также хотите передать конкретное сообщение об ошибке, вы можете использовать тело Ответ:
public ResponseEntity<EmployeeBankAccountOutputDto> createBankAccount(@ApiParam("Account data") @RequestBody final EmployeeBankAccountInputDto accountCreationDto) {
try {
return ResponseEntity.ok(service.createBankAccount(accountCreationDto));
} catch (InvalidAccountDataException ex) {
log.warn(ex.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
}
Обратите внимание, что если вам нужно выполнить эту обработку в нескольких контроллерах, это, вероятно, означает, что обработчик исключений будет более подходящим подходом.
Например, чтобы обрабатывать InvalidAccountDataException
единообразным способом:
@ControllerAdvice
public class MyExceptionHandler extends ResponseEntityExceptionHandler {
Logger LOGGER = LoggerFactory.getLogger(MyExceptionHandler.class);
@ExceptionHandler(value = { InvalidAccountDataException.class })
protected ResponseEntity<Object> handleGenericExceptions(InvalidAccountDataException ex, WebRequest request) {
log.warn(ex.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
}
Вы можете добавить больше методов для обработки большего количества типов исключений, если, конечно, требуется.
Если вы не выбросите исключение из 1-го блока catch, и в этом случае будет сгенерировано и перехвачено исключение, что должен вернуть метод?
Вот почему вы получаете ошибку компилятора, так как не будет никакого возвращаемого значения, так как либо отсутствует оператор возврата, либо не генерируется исключение, которое могло бы вызвать внезапную остановку потока выполнения, поэтому вместо Вы можете сделать следующее:
public EmployeeBankAccountOutputDto createBankAccount(@ApiParam("Account data") @RequestBody final EmployeeBankAccountInputDto accountCreationDto) {
EmployeeBankAccountInputDto employeeBankAccountInputDto = null;
try {
employeeBankAccountInputDto = service.createBankAccount(accountCreationDto);
} catch (InvalidAccountDataException ex) {
log.warn(ex.getMessage());
} catch (CountryNotFoundException ex) {
throw new CountryNotFoundResponseException(ex.getCountryCode(), ex);
}
return employeeBankAccountInputDto;
}
Вы должны идеально обернуть возвращаемый объект в ResponseEntity
и добавить сообщение & amp; Код ответа (как поясняет davidxxx в своем комментарии).
public ResponseEntity<EmployeeBankAccountOutputDto> createBankAccount(@ApiParam("Account data") @RequestBody final EmployeeBankAccountInputDto accountCreationDto) {
EmployeeBankAccountInputDto employeeBankAccountInputDto = null;
try {
employeeBankAccountInputDto = service.createBankAccount(accountCreationDto);
} catch (InvalidAccountDataException ex) {
log.warn(ex.getMessage());
return new ResponseEntity(employeeBankAccountInputDto, HttpStatus.BAD_REQUEST);
} catch (CountryNotFoundException ex) {
throw new CountryNotFoundResponseException(ex.getCountryCode(), ex);
}
return new ResponseEntity(employeeBankAccountInputDto, HttpStatus.OK);
}