错误 415 不支持的媒体类型:如果是 JSON,POST 不会到达 REST,但如果是 XML,它会 [英] Error 415 Unsupported Media Type: POST not reaching REST if JSON, but it does if 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屋!