Reputation: 1559
When I do a POST request on localhost:8080/api/users to create a new user I get the following error :
{
"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/"
}
Here is the request's body, JSON (application/json) is selected.
It gives the same error even if I remove the Roles and keep it null
.
The header's content type is application/json as well.
This is my controller :
@PostMapping("/api/users" )
public User createUser(@Valid @RequestBody User user) {
securityService.autologin(user.getUsername(), user.getPassword());
return userService.createUser(user);
}
createUser function in UserService :
public User createUser(@Valid @RequestBody User user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
user.setRoles(new HashSet<>(roleRepository.findAll()));
return userRepository.save(user);
}
This is my User class :
@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;
}
}
Upvotes: 34
Views: 182148
Reputation: 1
"timestamp": "2024-12-13T13:34:15.671+00:00",
"status": 415,
"error": "Unsupported Media Type",
"trace": "org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type 'application/json;charset=UTF-8' is not supported\r\n\tat org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:236)\r\n\tat org.springframework.web.
in springboot project this error occured: I am using " @JsonBackReference" it throws the error ,if you remove then ,You will be not getting the error
Upvotes: 0
Reputation: 1
I had similar problem, which caused from the mismatch of JsonBackReference and JsonManagedReference's values. @JsonBackReference(value = "parent - address - reference") vs @JsonManagedReference(value = "parent - address reference")
Upvotes: 0
Reputation: 131
In my case I Had two times the same identifier for jsonProperty in my dto class When I made the request return: "Content type 'application/json;charset=UTF-8" Not sure why return that error but once I changed the identifier it works.
Upvotes: 9
Reputation: 376
I had the same issue when using @PutMapping
and @RequestBody
MultiValueMap<String,String>
. I changed the MultiValueMap
to Map and it worked, just like what edta had suggested above.
Upvotes: 0
Reputation:
Try removing charset from header Content-type, application json only, and it will probably work.
Upvotes: 0
Reputation: 87
may be too late for this post.
if you can add this media type in your controller class for consumes={MediaType.APPLICATION_JSON_UTF8_VALUE} you can get pass this.
Upvotes: 0
Reputation: 390
I also encounter this error while using following with a PATCH
request:
public Order markOrderAsPayed(@RequestBody final MultiValueMap<String, String> values) {
...
}
The MultiValueMap is from org.springframework.util
. Changing the Map to Map<String, String>
resolved the problem for me.
Sorry, but I can't give an explanation why.
Upvotes: 0
Reputation: 41
I was also encountering this Error as WARN with Jackson deserialization. My situation more closely related to the response from Klaudia where I had a member field on my POJO for a Service that I had marked with @JsonIgnore, but I had renamed my getter and setter to getService() and setService() for brevity instead of the variable name which matched a longer named Service Interface. Adding @JsonIgnore to the differently named getter and setter resolved the error.
Upvotes: 2
Reputation: 87
There can be the case when someone mistakenly keeps 2 getters for the same property and Jackson deserialization fails to evaluate.
It throws
Failed to evaluate Jackson deserialization for type [[simple type,
class com.org..*..*]]:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Conflicting getter definitions for property \"field_name\":
com.org..*..*#getterBName() vs com.org..*..*#gettername()"
In that case, just remove the extra getter of that field.
Upvotes: 1
Reputation: 221
In my case there was a Jackson fail, logged as a WARN:
Failed to evaluate Jackson deserialization for type [[simple type, class ***]]: com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property [...]
I had overloaded a setter by accident, so it could not be resolved by Jackson and spring has thrown 415.
Upvotes: 22
Reputation: 1246
It clearly says Unsupported Media type which means due to any issue the call to operation cannot be completed. so check what your service operation is asking for and are you sending all the fields correctly. Most of the time there is mapping issue. Check console for errors.
Upvotes: 0
Reputation: 25
You specified content-type = application/json. I think you may have to check also "Accept" Header property (application/json)
Upvotes: 2
Reputation: 11487
You can try something like
@PostMapping(value="/rest/account/json", consumes={"application/json"})
Upvotes: 2
Reputation: 109
Set @Produces(MediaType.APPLICATION_JSON)
to your function to set it in json mime type.
You can check that restapi for more informations.
Upvotes: -1