Запуск Java IllegalArgumentException: класс org.eclipse.jetty.server.handler.ErrorHandler объявляет несколько полей JSON с именем _listeners

#java #post #spark-java

#java #Публикация #spark-java

Вопрос:

Я разрабатываю простой проект с использованием Java Spark, и в данный момент я пытаюсь реализовать небольшой RESTful service. У меня есть этот метод post:

 post("/users", (request, response) -&&t; {
        response.type("application/json");
        User user = new Gson().fromJson(request.body(),User.class);
        userService.addUser(user);
        return new Gson().toJson(response);
    });
  

Я использую postman для указания тела запроса:

 {   "id": "1012", 
"name": "Mac",
"lastname": "Mason1",
"email": "email"
}
  

И пользовательский класс равен:

  public class User {

public int id;
public Strin& name;
public Strin& lastname;
public Strin& email;

public User (int id, Strin& name, Strin& lastname, Strin& email) {
    this.id = id;
    this.name = name;
    this.lastname = lastname;
    this.email = email;
}
  

Всякий раз, когда я пытаюсь выполнить post-запрос, появляется следующая ошибка:

 ERROR spark.http.matchin&.GeneralError - 
java.lan&.Ille&alAr&umentException: class 
or&.eclipse.jetty.server.handler.ErrorHandler declares multiple JSON fields 
named _listeners
  

Комментарии:

1. Ожидается ли, что вы пытаетесь сериализовать response объект как JSON?

Ответ №1:

 return new Gson().toJson(response);
  

Этот код пытается сериализовать response объект как JSON. Вероятно, это опечатка (вы, конечно, имели в виду return new Gson().toJson(user); или что-то совершенно другое вместо этого) и завершается ошибкой из-за того, что Gson пытается рекурсивно сериализовать все поля в иерархии классов response .

Комментарии:

1. Да, спасибо, я следил за руководством, где они выполнили этот toJSON (response) и подумал, что все в порядке. Спасибо за объяснение