Http状态415不支持的媒体类型错误与JSON POST



当我尝试向服务器发送POST请求时,我得到HTTP 415不支持的媒体类型错误。Content-Type: application/json不能解决问题。get方法工作得很好。我明白这可能是ManyToOne依赖的问题,但我无法决定如何编写请求。

Enity类:

@Entity
@Table(name = "director")
@Data
public class Director {
@Id
@Column
private int id;

@Column
private String name;

@Column
private String surname;

@Column
private String post;

@Column
private int numberPhone;

@OneToMany(mappedBy = "directorFromProjectActivities")
@JsonManagedReference
private List<ProjectActivities> projectActivitiesList;

RestController:

@RestController
@RequestMapping("/api")
public class RestControllerDirector {
import org.example.dao.IDao;
import org.example.entity.Director;
import org.example.services.IService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@PostMapping(value = "/director", consumes = {"*/*"})
public void addDirector(@RequestBody Director director){
dao.add(director);
}
}

JSON我正在发送一个邮递员:

{
"id": 100,
"name": "Alex",
"surname": "Round",
"post": "HR",
"numberPhone": 82171788
}

依赖杰克逊:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.1</version>
</dependency>

如何解决这个问题?

问题出在这一行

@PostMapping (value ="/director"消耗={">/"})当我尝试重新创建您的情况时,它仍然是内部错误,您应该删除"消费";或者完全用application/json写,也可以用邮差写

尝试consumes="application/*"

我更喜欢使用 来定义消费者数据类型cosumes = MediaType.APPLICATION_JSON

或者如果它支持多种类型,如json和XML定义:

consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON_VALUE}.

参见spring文档中的更多示例。

另外,在成功创建资源(Director)时返回HTTP状态码201和正文也是一种好做法。body可以是返回给客户端的信息,如id等。像

return new ResponseEntity.status(HttpStatus.CREATED).build()

或带正文

return new ResponseEntity.status(HttpStatus.CREATED).body(/** your response object here **/).build()

确保在addDirector方法上只添加consumesproduces注释。

这是ResponseEntity和MediaType的文档。

最新更新