Как проверить успех / неудачу в запросах к базе данных Java Spring? - PullRequest
1 голос
/ 08 апреля 2019

У меня есть код для удаления рецепта из моей базы данных mongoDB:

@RequestMapping(value = "/recipe/{id}", method = RequestMethod.DELETE)
public String deleteSingleRecipe(@PathVariable("id") String recipeId) {
    try {
        repository.deleteById(recipeId);
        return "Deleted RECIPE success";
    } catch (Exception ex) {
        return ex.toString();
    }
}

Это может успешно удалить рецепт на основе идентификатора. Однако я не уверен, как отлавливать случаи, например, если рецепт даже не существует или удаление не удалось.

С JavaScript / Node это было действительно легко, потому что я мог передать функцию обратного вызова, в зависимости от того, был ли результат / ошибка нулевым, я мог определить успешность запроса и продолжить. Я довольно потерян, как сделать это в Java / Spring.

Когда я пытался удалить рецепт во второй раз, я все еще получал «Удаленный успех РЕЦЕПТА».

Ответы [ 3 ]

0 голосов
/ 08 апреля 2019

Попробуйте добавить новый метод в интерфейс хранилища, как этот

@Modifying
@Query("DELETE FROM MY_TABLE WHERE ID = ?1")
default boolean deleteById(IdPrimitiveType id){
  return true;
 }

Надеюсь, это поможет

0 голосов
/ 08 апреля 2019

Если вы проверите интерфейс JPARepository, вы получите

/**
     * Deletes the entity with the given id.
     * 
     * @param id must not be {@literal null}.
     * @throws IllegalArgumentException in case the given {@code id} is {@literal null}
     */
    void deleteById(ID id);

/**
     * Deletes a given entity.
     * 
     * @param entity
     * @throws IllegalArgumentException in case the given entity is {@literal null}.
     */
    void delete(T entity);

, поэтому, согласно вашему требованию, он не будет выдавать никаких исключений, если данный идентификатор не существует в БД.

для этого вы можете использовать boolean isFound = repository.existsById(recipeId);, и если isFound имеет значение true, вы можете удалить его. и если isFound ложно, вы можете выбросить исключение.

Второй способ - проверить

  public class SimpleJpaRepository<T, ID> implements JpaRepository<T, ID>, JpaSpecificationExecutor<T>

этот класс содержит deleteById метод. и этот метод вызовет исключение, если id не существует в БД.

/*
     * (non-Javadoc)
     * @see org.springframework.data.repository.CrudRepository#delete(java.io.Serializable)
     */
    @Transactional
    public void deleteById(ID id) {

        Assert.notNull(id, ID_MUST_NOT_BE_NULL);

        delete(findById(id).orElseThrow(() -> new EmptyResultDataAccessException(
                String.format("No %s entity with id %s exists!", entityInformation.getJavaType(), id), 1)));
    }
0 голосов
/ 08 апреля 2019

Вы можете добавить проверку перед использованием existById

boolean isFound = repository.existsById(recipeId);

Возвращает, существует ли сущность с данным идентификатором.

...