Как исправить эту ошибку синтаксического анализа JSON в Spring Boot? - PullRequest
0 голосов
/ 23 мая 2019

Я создал службу Restfull с Spring, простой API для поддержки администратора:

@PostMapping("/admin/signup")
    public ResponseEntity<?> signupAdmin(@RequestBody Admin admin){
        if(adminRepository.existsById(admin.getUsername())){
            return new ResponseEntity<String>("Username already taken", HttpStatus.FOUND);
        }else{
            adminRepository.save((Admin) admin);
            return new ResponseEntity<Admin>( adminRepository.findByUsername(admin.getUsername()), HttpStatus.OK);
        }
}

Вот код, с пропущенными геттерами и сеттерами:

@MappedSuperclass
public class User {
    @Id
    protected String username;
    protected String email;
    protected String password;
}

@Entity
public class Admin extends User{

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<Survey> created_survey;
}

@Entity
public class Customer extends User{

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Choice> choices;
}

Я много пробовал, но не могу это исправить, вот json, который нужно разобрать с Admin

{username: "aaa", email: "aaa@", password: "aaa", created_survey: []}

А вот это и есть ошибка:

POST "/admin/signup", parameters={}

Mapped to public org.springframework.http.ResponseEntity<com.modal.Admin> com.controller.LoginController.signupAdmin(com.modal.Admin)

Could not resolve parameter [0] in public org.springframework.http.ResponseEntity<com.modal.Admin> com.controller.LoginController.signupAdmin(com.modal.Admin): JSON parse error:Cannot deserialize instance of `com.modal.Admin` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `com.modal.Admin` out of START_ARRAY token
 at [Source: (PushbackInputStream); line: 1, column: 1]

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `com.modal.Admin` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `com.modal.Admin` out of START_ARRAY token
 at [Source: (PushbackInputStream); line: 1, column: 1]]

Completed 400 BAD_REQUEST

Возможно, подклассы не наследуют поля. Я знаю, что трудно найти способ решить эту ошибку, я надеюсь, что кто-то может просто помочь мне

решаемые

let user = {"username": "user", "email":"email", "password":"password"};
http = new XMLHttpRequest();
...
http.send(user); //WRONG

Как я решил это

let user = {"username": "user", "email":"email", "password":"password"};
http = new XMLHttpRequest();
...
http.send(JSON.stringify(user)); //CORRECT

Я не знаю, зачем нужен JSON.stringify, но он работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...