Ошибка com.fasterxml.jackson.databind.exc.MismatchedInputException Spring boot

У меня есть контроллер, в котором я определил метод PostMapping для создания нового объявления следующим образом:

@PostMapping
public ResponseEntity<?> registerAd(@RequestBody DonationAd ad){
    repository.save(ad);
    return ResponseEntity.accepted().body(new ApiResponse(true,"sucess"));
}

когда я пытаюсь сделать запрос, используя raw на почтальоне, например:

{
"title":"lalal",
"description":"lalallalalal",
"user":2,
"images":[8,17],
"state":"BAD",
"adress":"textextextetextetxt"
}

Я получил этот ответ, когда возникла проблема с созданием экземпляра пользователя:

{
"timestamp": "2018-12-27T14:51:30.465+0000",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Cannot construct instance of `com.betroc.model.User` (although at least one Creator exists): no int/Int-argument constructor/factory method to deserialize from Number value (2); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.betroc.model.User` (although at least one Creator exists): no int/Int-argument constructor/factory method to deserialize from Number value (2)\n at [Source: (PushbackInputStream); line: 4, column: 8] (through reference chain: com.betroc.model.DonationAd[\"user\"])",
"path": "/api/donationAds"}

зная, что тот же метод отлично работает с данными формы, также используя postMan

это класс пользователя:

public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotBlank
@Size(max = 40)
private String name;

@NotBlank
@Size(max = 15)
private String username;

@NaturalId
@NotBlank
@Size(max = 40)
@Email
private String email;

@JsonIgnore
@NotBlank
@Size(max = 100)
private String password;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles",
        joinColumns = @JoinColumn(name = "user_id"),
        inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();

private boolean enabled;

public User() {
}

public User(String name, String username, String email, String password) {
    this.name = name;
    this.username = username;
    this.password = password;
    this.email = email;
    this.enabled = false;

}
//getters ans setters
}

и это DoantionAd, расширяющий абстрактный класс Advertising:

public class DonationAd extends Advertisement{

@Enumerated(EnumType.STRING)
private State state;

@Column(columnDefinition = "TEXT")
private String address;

//getters and setters
}

а затем объявление:

public abstract class Advertisement {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@NotNull
private String title ;

@NotNull
@Column(columnDefinition = "TEXT")
private String description;

@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;

@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;

@ManyToOne
private User  user;


@OneToMany(cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<Image> images;

//getters and setters
}

Пользователь - это объект в объявлении, поэтому я думаю, вам нужно установить объект отверстия, другие думают, что я не вижу ничего, где @OneToMany (mappedBy = "user", cascade = CascadeType.ALL) private List <Advertising> Advertisements = new ...

TinyOS 27.12.2018 17:13

проблема в том, что тот же код работал при использовании данных формы вместо сырых, тогда я думаю, что Spring может сопоставить идентификатор с соответствующим объектом. есть @ManyToOne private User user; в рекламе

Achraf 27.12.2018 17:19
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
2
495
1

Ответы 1

Если вы попробуете с этим json:

{
   "title":"lalal",
   "description":"lalallalalal",
   "user":{  
      "id":2
   },
   "state":"BAD",
   "address":"textextextetextetxt"
}

Вы можете добавить к нему другие свойства

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