web-dev-qa-db-fra.com

"Type de contenu 'application / json; charset = UTF-8' non pris en charge" dans l'application Spring Rest

Lorsque je fais une demande POST sur localhost: 8080/api/users pour créer un nouvel utilisateur, j'obtiens ce qui suit Erreur :

{
"timestamp": "2018-05-28T09:44:55.704+0000",
"status": 415,
"error": "Unsupported Media Type",
"message": "Content type 'application/json;charset=UTF-8' not supported",
"path": "/api/users/"
}

enter image description here

C'est le corps de la requête, JSON (application/json) est sélectionné. Il donne la même erreur même si je supprime les rôles et le garde nul.

enter image description here

Le type de contenu de l'en-tête est également application/json.

enter image description here

Voici mon contrôleur:

@PostMapping("/api/users" )
public User createUser(@Valid @RequestBody User user) {
    securityService.autologin(user.getUsername(), user.getPassword());
    return userService.createUser(user);
}

fonction createUser dans UserService:

   public User createUser(@Valid @RequestBody User user) {
    user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
    user.setRoles(new HashSet<>(roleRepository.findAll()));
    return userRepository.save(user);
}

éditer

Voici ma classe d'utilisateurs:

@Entity
@Table(name = "user")
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, 
    allowGetters = true)
public class User implements Serializable{

private static final long serialVersionUID = 1L;


public User() {
    super();
    // TODO Auto-generated constructor stub
}

@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(name = "user_name")
private String name;

@Column(name = "user_email")
private String email;

@Column(name = "user_password")
@NotBlank
private String password;

@Column(name = "user_status")
private String status;

@Column(name = "user_tel")
private String tel;

@Column(name = "user_confirmation")
private String confirmation;

@Column(name = "user_birth_date")
@Temporal(TemporalType.DATE)
private Date birth_date;

@Column(nullable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
@CreatedDate
private Date createdAt;

@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
@LastModifiedDate
private Date updatedAt;

@JsonManagedReference
@ManyToMany
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;

@Column(name = "username")
@NotBlank
private String username;

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getTel() {
    return tel;
}

public void setTel(String tel) {
    this.tel = tel;
}

public String getConfirmation() {
    return confirmation;
}

public void setConfirmation(String confirmation) {
    this.confirmation = confirmation;
}

public Date getBirth_date() {
    return birth_date;
}

public void setBirth_date(Date birth_date) {
    this.birth_date = birth_date;
}

public Date getCreatedAt() {
    return createdAt;
}

public Date getUpdatedAt() {
    return updatedAt;
}

public void setUpdatedAt(Date updatedAt) {
    this.updatedAt = updatedAt;
}

public Set<Role> getRoles() {
    return roles;
}

public void setRoles(Set<Role> roles) {
    this.roles = roles;
}
}
10
Ouissal

J'ai pu le résoudre en supprimant @JsonManagedReference.

0
Ouissal

Vous pouvez utiliser "application/json" à la place

enter image description here

0
Himadri Mandal

Vous pouvez essayer quelque chose comme

@PostMapping(value="/rest/account/json", consumes={"application/json"})

0
Sajan Chandran

Il indique clairement le type de support non pris en charge, ce qui signifie qu'en raison de tout problème, l'appel à l'opération ne peut pas être effectué. vérifiez donc ce que votre opération de service demande et envoyez-vous tous les champs correctement. La plupart du temps, il y a un problème de cartographie. Vérifiez la console pour les erreurs.

0
Chandan Kumar

Vous avez spécifié content-type = application/json. Je pense que vous devrez peut-être également vérifier la propriété d'en-tête "Accepter" (application/json)

postman screenshot

0
Respect Pub