@GetMapping возвращает строковую информацию о том, что список пуст - PullRequest
0 голосов
/ 04 апреля 2020

Иногда может случиться, что в базе данных нет ничего, метод .findAll () не имеет ничего для отображения и возвращает пустое тело. Я знаю, что у меня есть возвращаемый тип этой функции «Список», и я не могу напрямую вернуть строку, но как я могу отправить тело ответа в виде строки или JSON, если список пуст, чтобы сообщить пользователю? Я хочу дать получателю информацию о том, что база данных пуста, чтобы он был понятен для него.

Аннотации классов:

@RestController
@RequestMapping(path = "/users")

Пример кода:

@GetMapping
public Iterable<User> findAll() {
    List<User> userList = userRepository.findAll();
    if(userList.isEmpty()){
        // return "This list is empty :(";
    }
    return userList;
}

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

На вашем уровне контроллера вы должны вернуть отображение ответа с возвращенным списком из базы данных. Поэтому, если он пуст, значение на входе будет нулевым.

Так что, если длина userList пуста, мы знаем, что БД пуста, и вы можете показать сообщение для user.

Пример внешнего псевдокода

fetch("${url}/users").then(response => {
    if (response.data.length == 0) {
        # Show message here, choose whichever way you want
        alert("Oh no! Database table was empty")
    }
    else {
        setData(response.data);
    }
});

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

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

1 голос
/ 04 апреля 2020

Это более или менее то, что вы могли бы сделать на фронтэнде. Однако вы можете вернуть POJO, содержащий список и строку, представляющую сообщение о списке, если это необходимо.

class UserFindAllResponse {

    private final List<User> users;

    private final String message;

    // constructor, getters

}
@GetMapping
public UserFindAllResponse findAll() {
    List<User> userList = userRepository.findAll();

    return new UserFindAllResponse(userList, userList.isEmpty() ? "There appears to be no users" : "There are x users");
}
...