错误 415 不支持的媒体类型:如果是 JSON,POST 不会到达 REST,但如果是 XML,它会 [英] Error 415 Unsupported Media Type: POST not reaching REST if JSON, but it does if XML

查看:16
本文介绍了错误 415 不支持的媒体类型:如果是 JSON,POST 不会到达 REST,但如果是 XML,它会的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am actually new to REST WS but really I don't get this 415 Unsupported Media Type.

我正在 Firefox 上使用 Poster 测试我的 REST,GET 对我来说也很好,POST(当它是一个 application/xml) 但是当我尝试 application/json 它根本没有到达 WS,服务器拒绝它.

I am testing my REST with Poster on Firefox and the GET works fine for me, also the POST (when it's a application/xml) but when I try application/json it doesn't not reach the WS at all, the server rejects it.

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

This is my URL: 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;
    }

}

推荐答案

问题在于 bean Customer 的反序列化.您的程序知道如何在 XML 中执行此操作,如 Daniel 正在编写的 JAXB,但很可能不知道如何在 JSON 中执行此操作.

The issue is in the deserialization of the bean Customer. Your programs knows how to do it in XML, with JAXB as Daniel is writing, but most likely doesn't know how to do it in JSON.

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

Here you have an example with 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/

这篇关于错误 415 不支持的媒体类型:如果是 JSON,POST 不会到达 REST,但如果是 XML,它会的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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