Внутренняя ошибка сервера при загрузке Spring Boot после запроса [Java]

Я пытаюсь отправить почтовый запрос, чтобы добавить объект пользователя в список пользователей (без базы данных). Конечные точки API getUser, getAllUsers работают нормально и дают желаемые результаты.

Когда я отправляю запрос Post с пользователем, он всегда дает 500 Internal Server Error.

Я также распечатал пользователя, и данные в порядке.

Ниже мой код -

Объект пользователя (User.java) -

public class User {

    
    private Integer userId;
    
    private String name;
    private String email;
    
    private Account account;

Геттеры и сеттеры вместе с конструкторами также присутствуют.

Мой пользовательский сервис и его реализация -

UserService.java —

@Service
public interface UserService {
    public User getUser(Integer userId);
    public List<User> getAllUsers();
    <T> ResponseEntity<T> deleteUser(Integer userId);
    <T> ResponseEntity<User> addUser(User user);
    
}

UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService{
    List<User> userList = List.of(
            new User(1311, "Vaibhav Shrivastava", "innomightmail@gmail.com"),
            new User(1312, "Varun Shrivastava", "varun@gmail.com"),
            new User(1313, "Rajesh Shrivastava", "rajesh@gmail.com")
        );
    
    @Override
    public User getUser(Integer id) {
        // TODO Auto-generated method stub
        System.out.println(this.userList.stream().filter(user -> user.getUserId().equals(id)).findAny().orElse(null));
        return this.userList.stream().filter(user -> user.getUserId().equals(id)).findAny().orElse(null);
    }

    @Override
    public List<User> getAllUsers() {
        // TODO Auto-generated method stub
        return userList;
    }

    
    @Override
    public <T> ResponseEntity<User> addUser(User user) {
        // TODO Auto-generated method stub
        
        userList.add(user);
        return new ResponseEntity<User>((User)user, HttpStatus.OK);
        
    }

Контроллер (UserController.java) —

@RestController
@RequestMapping("/user")
public class UserController {
    
@Autowired
private UserService userService;

@Autowired
private RestTemplate restTemplate;

@GetMapping("/{userId}")
public User getUser(@PathVariable("userId") Integer userId) {
    User user = this.userService.getUser(userId);
    Account account = this.restTemplate.getForObject("http://account-service/account/user/" + user.getUserId(), Account.class);
    
    user.setAccount(account);
    
    return user;
    
}

@GetMapping("/all-users")
public List<User> getAllUsers(){
    return this.userService.getAllUsers();
}

@PostMapping("/add-user")
public ResponseEntity<Object> addUser(@RequestBody User user) {
    try {
          User newUser = new User(user.getUserId(), user.getName(), user.getEmail());
          this.userService.addUser(newUser);
          return new ResponseEntity<>(user, HttpStatus.CREATED);
        } catch (Exception e) {
          User newUser = new User(user.getUserId(), user.getName(), user.getEmail());
          return new ResponseEntity<>(newUser, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    
}

GetUser и getAllUsers работают нормально (не путайтесь с учетной записью в getUser, это еще один мой микросервис)

Когда я отправляю почтовый запрос с помощью почтальона -

{
    "userId": 1314,
    "name": "James",
    "email": "james@gmail.com"
}

Получаю ответ - 500 Внутренняя ошибка сервера и объект пользователя, который я хотел проверить, поэтому я распечатал его -

{
    "userId": 1314,
    "name": "Kavita Shrivastava",
    "email": "kavita@gmail.com",
    "account": null
}

Я не знаю, почему я получаю внутреннюю ошибку сервера.

Запрос должен добавить нового пользователя в список в UserServiceImpl.

Не могли бы вы добавить трассировку стека из ошибки?

Sebastian 16.02.2023 11:18

@Sebastian filetransfer.io/data-package/iDvzEIpi#link вот трассировка стека

Innomight 16.02.2023 11:31

UserList неизменен в UserServiceImpl. Создайте список, используя new ArrayList<>();

vs_lala 16.02.2023 13:51
Лучшая компания по разработке спортивных приложений
Лучшая компания по разработке спортивных приложений
Ищете лучшую компанию по разработке спортивных приложений? Этот список, несомненно, облегчит вашу работу!
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
Деревья поиска (Алгоритм4 Заметки к учебнику)
Деревья поиска (Алгоритм4 Заметки к учебнику)
(1) Двоичные деревья поиска: среднее lgN, наихудшее N для вставки и поиска.
0
3
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Трассировка стека содержит всю информацию, которую вы ищете. UserServiceImple.addUser пытается добавить объект в userList . но userList - это неизменяемый список. поэтому он выдает исключение. код перетекает в блок «поймать» и возвращает 500 с вновь созданным объектом.

На мой взгляд, это происходит потому, что когда U использует List.of, он равен Collections.unmodifiedList, чтобы он выдавал исключение как его неизменяемый.

Другие вопросы по теме