首页 > 解决方案 > 通过 Postman 访问我的 JAVA api 时不受支持的媒体类型

问题描述

我是 REST-api 开发的初学者,我在通过邮递员访问我的 java api 时遇到了这个错误:“不支持的媒体类型”。我的 Pojo 课程是:

public class OrderRequest implements Serializable{

private static final long serialVersionUID = 1L;

public OrderRequest() {}

private long orderNo;
private int rateOverallExperience;
private String apiName;
private Double apiVersion;

public long getOrderNo() {
    return orderNo;
}
public int getRateOverallExperience() {
    return rateOverallExperience;
}
public String getApiName() {
    return apiName;
}
public Double getApiVersion() {
    return apiVersion;
}

public void setOrderNo(long orderNo) {
    this.orderNo = orderNo;
}
public void setRateOverallExperience(int rateOverallExperience) {
    this.rateOverallExperience = rateOverallExperience;
}
public void setApiName(String apiName) {
    this.apiName = apiName;
}
public void setApiVersion(Double apiVersion) {
    this.apiVersion = apiVersion;
}
}

我的控制器类是:

@RestController
public class OrderRatingController {

public OrderRatingController() {}

@Autowired
private OrderRequestService ordRequestService;

@Autowired
private ProductRatingService prdRatingService;

@RequestMapping(value = "/saveOrderRatings", method = RequestMethod.POST
            ,consumes = MediaType.APPLICATION_JSON_VALUE)                   //"application/json"
public OrderRequest saveOrder(@RequestBody OrderRequest requestObj) {

    System.out.println("Inside saveOrder. Json Object recieved : " + requestObj);

//...OTHER CODE...
    return requestObj;
}
}

我正在使用 Jetty 服务器(版本:9.4.0.M0)来测试我的 api。

Postman>Body tab>raw,我选择JSON(application/json)并发送:

{ “orderNo”:“737521F547D00D26”,“rateOverallExperience”:4,“apiName”:“giveitemrating”,“apiVersion”:“1.0”}

图片/快照中的邮递员标题相关详细信息:

图片/快照中的邮递员标题相关详细信息

当我发送这个时,我收到一个Unsupported Media Type错误。有人对此有任何想法吗?

编辑:正如评论中所建议的,更新的控制器类如下:@RequestMapping(value = "/saveOrderRatings", method = RequestMethod.POST ,consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE, headers = "Accept=application/json")

进一步在 POSTMAN gui 中添加了一个标题:Acceptwith value application/json

这是发送请求后邮递员请求的样子(仍然显示错误但结果标头发生变化): 在此处输入图像描述

标签: javarestcontrollerpostman

解决方案


您根本不需要配置消费或生产属性。Spring 将根据以下因素自动提供 JSON。

  1. 请求的接受头是 application/json
  2. @ResponseBody 注释方法
  3. 类路径上的杰克逊库
  4. 您可以使用 @RestController 代替 @Controller 注释。

推荐阅读