我使用的是JAX-RS的Jersey实现.我想将JSON对象发布到此服务,但我收到错误代码415不支持的媒体类型.我遗漏了什么?

这是我的代码:

@Path("/orders")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class OrderResource {

    private static Map<Integer, Order> orders = new HashMap<Integer, Order>();

    @POST
    public void createOrder(Order order) {

        orders.put(order.id, order);
    }

    @GET
    @Path("/{id}")
    public Order getOrder(@PathParam("id") int id) {
        Order order = orders.get(id);
        if (order == null) {
            order = new Order(0, "Buy", "Unknown", 0);
        }
        return order;
    }
}

Here's the Order object:

public class Order {
    public int id;
    public String side;
    public String symbol;
    public int quantity;
    ...
}

这样的GET请求工作正常,并以JSON格式返回订单:

GET http://localhost:8080/jaxrs-oms/rest/orders/123 HTTP/1.1

然而,像这样的POST请求返回415:

POST http://localhost:8080/jaxrs-oms/rest/orders HTTP/1.1

{
    "id": "123",
    "symbol": "AAPL",
    "side": "Buy",
    "quantity": "1000"
}

推荐答案

答案出人意料地简单.我必须在POST请求中添加一个值为application/jsonContent-Type头.没有这个标题,Jersey不知道如何处理请求体(尽管有@Consumes(MediaType.APPLICATION_JSON)注释)!

Json相关问答推荐

PostgreSQL 12.17从JSON数组提取元素

Azure Data Factory JSON输出格式问题

使用更高级别架构中的字段值在$def内实现约束

在解码的JSON哈希中搜索数组元素

如何使用PowerShell从ExchangeOnline命令执行中获得JSON输出

在 NX 工作区中跨多个应用共享 ngx-translate 翻译文件

每次在 SoapUI 中发送请求时,将 JSON 响应的子 node 分配给项目变量

如何使用nifi从json文件中过滤属性

将来自 Golang 的 JSON API 调用响应输出到 nextjs 前端

将请求中的数据推送到数组中

将 colly 包输出文本添加到 golang 中的映射

如何在 onClick 事件处理程序中识别在同一 map 上绘制的多个多边形中的哪个(使用 react-leaflet)被单击?

序列化为json时如何忽略空列表?

获取json中某个键的索引

IE8 原生 JSON.parse 错误导致堆栈溢出

使用 jq 从 bash 中管道分隔的键和值创建 JSON

使用 JSON.Net 的 C# 到 JSON 序列化

waitUntilAllTask​​sAreFinished 错误 Swift

如何使用 Gson 解码具有未知字段的 JSON?

来自 Gson 的 JSON 字符串:删除双引号