根据MIME类型的类型处理REST请求

时间:2014-07-13 07:14:17

标签: java rest post jersey mime-types

我是一个名为createCustomer()的方法,它是一个POST方法,它同时使用MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON,现在我想检查来自客户端的请求的实际MIME类型,它可以是XML或JSON,并根据请求的MIME类型,我想调用两种不同的方法。

请您提供代码来检查Incoming请求的MIME类型,并根据类型调用两种不同的方法。

示例代码如下所示:

@POST
@Path("/createCustomer")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response createCustomer(Customer customer ) {
    //if the request is in JSON then call the method createCustomerJSON()
    //else if the request is in XML then call the method createCustomerXML()

    //String output = output from either the method createCustomerJSON() or createCustomerXML()

    return Response.status(200).entity(output).build();
}

2 个答案:

答案 0 :(得分:0)

javax.ws.rs.Consumes注释可能就是您所需要的。通过在不同的方法上添加不同的注释,您可以拆分XML和JSON的处理。

来自javadoc:

  

定义资源类或MessageBodyReader的方法可以接受的媒体类型。如果未指定,容器将假定任何媒体类型都是可接受的。方法级别注释会覆盖类级别注释。容器负责确保调用的方法能够使用HTTP请求实体主体的媒体类型。如果没有这样的方法可用,则容器必须使用HTTP" 415 Unsupported Media Type"由RFC 2616指定。

答案 1 :(得分:0)

首先,发布一些代码会很棒。

其次,一个解决方案是创建两个具有相同路径的方法,一个使用XML,另一个使用JSON。

@POST
@Path("yourPath")
@Consumes(MediaType.APPLICATION_XML);
public Response createCustomerXML() {...}

@POST
@Path("yourPath")
@Consumes(MediaType.APPLICATION_JSON);
public Response createCustomerJSON() {...}