如何将JSON对象发布到JAX-RS服务 [英] How to POST a JSON object to a JAX-RS service

查看:83
本文介绍了如何将JSON对象发布到JAX-RS服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using the Jersey implementation of JAX-RS. I would like to POST a JSON object to this service but I am getting an error code 415 Unsupported Media Type. What am I missing?

这是我的代码:

@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;
    }
}

这是Order对象:

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

像这样的GET请求可以很好地工作,并以JSON格式返回订单:

A GET request like this works perfectly and returns an order in JSON format:

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

但是这样的POST请求返回415:

However a POST request like this returns a 415:

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

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

推荐答案

答案非常简单.我必须在POST请求中添加一个Content-Type标头,其值为application/json.没有此标头,Jersey不知道如何处理请求正文(尽管有@Consumes(MediaType.APPLICATION_JSON)批注)!

The answer was surprisingly simple. I had to add a Content-Type header in the POST request with a value of application/json. Without this header Jersey did not know what to do with the request body (in spite of the @Consumes(MediaType.APPLICATION_JSON) annotation)!

这篇关于如何将JSON对象发布到JAX-RS服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆