错误 415 不支持的媒体类型:如果是 JSON,则 POST 未达到 REST,但如果是 XML,则可以

新手上路,请多包涵

我实际上是 REST WS 的新手,但我真的不明白这个 415 Unsupported Media Type

我正在 Firefox 上使用 Poster 测试我的 REST,并且 GET 对我来说很好,而且 POST (当它是 application/xml application/json--- 它根本没有到达WS,服务器拒绝它。

这是我的网址:http://localhost:8081/RestDemo/services/customers/add

这是 JSON 我正在发送: {"name": "test1", "address" :"test2"}

这是 XML 我正在发送:

 <customer>
    <name>test1</name>
    <address>test2</address>
</customer>

这是我的资源类:

 @Produces("application/xml")
@Path("customers")
@Singleton
@XmlRootElement(name = "customers")
public class CustomerResource {

    private TreeMap<Integer, Customer> customerMap = new TreeMap<Integer, Customer>();

    public  CustomerResource() {
        // hardcode a single customer into the database for demonstration
        // purposes
        Customer customer = new Customer();
        customer.setName("Harold Abernathy");
        customer.setAddress("Sheffield, UK");
        addCustomer(customer);
    }

    @GET
    @XmlElement(name = "customer")
    public List<Customer> getCustomers() {
        List<Customer> customers = new ArrayList<Customer>();
        customers.addAll(customerMap.values());
        return customers;
    }

    @GET
    @Path("/{id}")
    @Produces("application/json")
    public String getCustomer(@PathParam("id") int cId) {
        Customer customer = customerMap.get(cId);
        return  "{\"name\": \" " + customer.getName() + " \", \"address\": \"" + customer.getAddress() + "\"}";

    }

    @POST
    @Path("/add")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public String addCustomer(Customer customer) {
         //insert
         int id = customerMap.size();
         customer.setId(id);
         customerMap.put(id, customer);
         //get inserted
         Customer result = customerMap.get(id);

         return  "{\"id\": \" " + result.getId() + " \", \"name\": \" " + result.getName() + " \", \"address\": \"" + result.getAddress() + "\"}";
    }

}

编辑1:

这是我的客户类:

 @XmlRootElement
public class Customer implements Serializable {

    private int id;
    private String name;
    private String address;

    public Customer() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

}

原文由 mzereba 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 359
2 个回答

问题在于 bean Customer 的反序列化。您的程序知道如何在 XML 中使用 Daniel 编写的 JAXB,但很可能不知道如何在 JSON 中进行。

这里有一个 Resteasy/Jackson 的例子 http://www.mkyong.com/webservices/jax-rs/integrate-jackson-with-resteasy/

与泽西岛相同: http ://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/

原文由 unludo 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 REST 客户端标头部分添加 Content-Type: application/jsonAccept: application/json

原文由 Anup Awasthi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题