1. ホーム
  2. json

JAX-RSサービスへJSONオブジェクトをPOSTする方法

2023-11-22 15:12:29

質問

JAX-RSのJersey実装を使用しています。このサービスにJSONオブジェクトをPOSTしたいのですが、エラーコード415 Unsupported Media Typeが表示されます。何が足りないのでしょうか?

以下は私のコードです。

@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形式の注文を返します。

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"
}

どのように解決するのですか?

答えは意外と簡単でした。私は Content-Type ヘッダを POST リクエストの値として application/json . このヘッダがないと、Jersey はリクエストのボディをどうすればいいのかわかりませんでした (たとえ @Consumes(MediaType.APPLICATION_JSON) アノテーションにもかかわらず)!