我实际上是REST WS的新手,但我真的不明白415 Unsupported Media Type.
我正在使用Firefox上的Poster测试我的REST,GET对我来说工作正常,但是POST(当它是a时application/xml)但是当我尝试application/json它根本没有到达WS时,服务器拒绝它.
这是我的URL:http:// localhost:8081/RestDemo/services/customers/add
这是JSON我发送的:{"name": "test1", "address" :"test2"}
这是XML我发送的:
<customer>
<name>test1</name>
<address>test2</address>
</customer>
Run Code Online (Sandbox Code Playgroud)
这是我的资源类:
@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 = …Run Code Online (Sandbox Code Playgroud) 我有一个带JAXB注释的员工类:
@XmlRootElement(name = "employee")
public class Employee {
private Integer id;
private String name;
...
@XmlElement(name = "id")
public int getId() {
return this.id;
}
... // setters and getters for name, equals, hashCode, toString
}
Run Code Online (Sandbox Code Playgroud)
还有一个JAX-RS资源对象(我使用的是Jersey 1.12)
@GET
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("/")
public List<Employee> findEmployees(
@QueryParam("name") String name,
@QueryParam("page") String pageNumber,
@QueryParam("pageSize") String pageSize) {
...
List<Employee> employees = employeeService.findEmployees(...);
return employees;
}
Run Code Online (Sandbox Code Playgroud)
此端点工作正常.我明白了
<employees>
<employee>
<id>2</id>
<name>Ana</name>
</employee>
</employees>
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改方法以返回Response对象,并将员工列表放在响应正文中,如下所示:
@GET
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) …Run Code Online (Sandbox Code Playgroud) 我在Eclipse之外尝试运行Jetty Jersey和Jackson时变得疯狂.
我有一个主要课程:
public class Main {
public static void main(String[] args) throws Exception {
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*").setInitParameter(
"jersey.config.server.provider.classnames", CanaryEndpoint.class.getCanonicalName());
Server jettyServer = new org.eclipse.jetty.server.Server(8089);
jettyServer.setHandler(context);
jettyServer.start();
jettyServer.join();
}
}
Run Code Online (Sandbox Code Playgroud)
端点类:
@Path("/endpoint")
public class CanaryEndpoint {
@POST
@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String canaryTest(ValueWrapper param) {
System.out.println("Deserialized Property: " + param.isFlag());
return "{OK}";
}
}
Run Code Online (Sandbox Code Playgroud)
和一个实体(反序列化)类:
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class ValueWrapper {
@XmlElement
public boolean flag;
public ValueWrapper() {}
public boolean isFlag() { return flag; }
public …Run Code Online (Sandbox Code Playgroud)