相关疑难解决方法(0)

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

我实际上是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)

java rest post json web-services

74
推荐指数
4
解决办法
36万
查看次数

JAX-RS:如何在返回Response对象时自动序列化集合?

我有一个带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)

jax-rs jaxb jersey

17
推荐指数
1
解决办法
3万
查看次数

Jetty + Jersey + Jackson,Eclipse(成功)与命令行的不同行为(错误不支持的媒体类型)!

我在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)

java jetty jax-rs jersey jackson

5
推荐指数
1
解决办法
1293
查看次数

标签 统计

java ×2

jax-rs ×2

jersey ×2

jackson ×1

jaxb ×1

jetty ×1

json ×1

post ×1

rest ×1

web-services ×1