Java XML作为默认值而不是JSON rest服务返回

Java XML作为默认值而不是JSON rest服务返回,java,xml,json,rest,jersey-2.0,Java,Xml,Json,Rest,Jersey 2.0,我有一个rest api,它支持返回XML和JSON,如下所示: @GET @Path("/areas/city/{cityId}") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Response getAreaByCity(@PathParam("cityId") String cityId) { List<Area> areaList

我有一个rest api,它支持返回XML和JSON,如下所示:

@GET
    @Path("/areas/city/{cityId}")
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Response getAreaByCity(@PathParam("cityId") String cityId) {
        List<Area> areaList = //service call to get area
        GenericEntity<List<Area>> areaEntityList = new GenericEntity<List<Area>>(areaList) {};
        return Response.ok(areaEntityList).build();
    }
@GET
@路径(“/areas/city/{cityId}”)
@产生({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
公共响应getAreaByCity(@PathParam(“cityId”)字符串cityId){
在列表中,我更改了我的服务以提供质量因素。但默认情况下,XML仍然返回。
思考了一段时间后,我看到正在使用的
区域
类被标记为
@XmlRootElement
。这是否导致了问题?如果是,如何解决?如果不是,我如何返回JSON作为默认值。

您可以尝试这个方法

@POST
@Consumes({  MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response post(Student s,@HeaderParam("Accept") String accept){
    if(accept!=null && accept.contains(MediaType.APPLICATION_XML)){
    accept = MediaType.APPLICATION_XML;
    }else{
    accept = MediaType.APPLICATION_JSON;
    }
    //Construct list
    Response.ok(list, accept).build();
}
你可以试试这个

@POST
@Consumes({  MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response post(Student s,@HeaderParam("Accept") String accept){
    if(accept!=null && accept.contains(MediaType.APPLICATION_XML)){
    accept = MediaType.APPLICATION_XML;
    }else{
    accept = MediaType.APPLICATION_JSON;
    }
    //Construct list
    Response.ok(list, accept).build();
}
你可以试试这个

@POST
@Consumes({  MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response post(Student s,@HeaderParam("Accept") String accept){
    if(accept!=null && accept.contains(MediaType.APPLICATION_XML)){
    accept = MediaType.APPLICATION_XML;
    }else{
    accept = MediaType.APPLICATION_JSON;
    }
    //Construct list
    Response.ok(list, accept).build();
}
你可以试试这个

@POST
@Consumes({  MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response post(Student s,@HeaderParam("Accept") String accept){
    if(accept!=null && accept.contains(MediaType.APPLICATION_XML)){
    accept = MediaType.APPLICATION_XML;
    }else{
    accept = MediaType.APPLICATION_JSON;
    }
    //Construct list
    Response.ok(list, accept).build();
}


您可以从@HeaderParam检查接受类型;如果接受类型是XML,我们可以使用XML创建响应,否则使用JSON。是的,对于这种情况,我们需要包括检查,如果客户端没有提供任何接受类型信息,默认情况下,发送的是XML。@pasupati-这是有效的,但是为什么提供质量因子不起作用呢正如在给定的链接中所解释的。质量因素也起作用,如果您使用的是SOAP UI,请检查响应的原始选项卡,并确认我是否仍然获得XML。我将服务product注释更改为@products({MediaType.APPLICATION_XML+;“qs=0.9”,MediaType.APPLICATION_JSON})您是否返回了JAXB对象,即标记为@XmlRootElement的对象?您可以从@HeaderParam检查接受类型;如果接受类型是XML,我们可以使用XML创建响应,否则JSON.Ya,对于这种情况,我们需要包括检查,如果客户端未提供任何接受类型信息,默认情况下,将发送XML。@Pasupathi-这是有效的,但是为什么提供质量因子不能像给定链接中所解释的那样工作。质量因子也可以工作,如果您使用的是SOAP UI,请检查响应的原始选项卡,并确认我是否仍然获得XML。我将服务product注释更改为@products({MediaType.APPLICATION_XML+”;qs=0.9“,MediaType.APPLICATION_JSON})您是否返回了JAXB对象,即标记为@XmlRootElement的对象?您可以从@HeaderParam检查接受类型;如果接受类型是XML,我们可以使用XML创建响应,否则JSON.Ya,对于这种情况,我们需要包括检查,如果客户端未提供任何接受类型信息,默认情况下,将发送XML。@Pasupathi-这是有效的,但是为什么提供质量因子不能像给定链接中所解释的那样工作。质量因子也可以工作,如果您使用的是SOAP UI,请检查响应的原始选项卡,并确认我是否仍然获得XML。我将服务product注释更改为@products({MediaType.APPLICATION_XML+”;qs=0.9“,MediaType.APPLICATION_JSON})您是否返回了JAXB对象,即标记为@XmlRootElement的对象?您可以从@HeaderParam检查接受类型;如果接受类型是XML,我们可以使用XML创建响应,否则JSON.Ya,对于这种情况,我们需要包括检查,如果客户端未提供任何接受类型信息,默认情况下,将发送XML。@Pasupathi-这是有效的,但是为什么提供质量因子不能像给定链接中所解释的那样工作。质量因子也可以工作,如果您使用的是SOAP UI,请检查响应的原始选项卡,并确认我是否仍然获得XML。我将服务product注释更改为@products({MediaType.APPLICATION_XML+”;qs=0.9“,MediaType.APPLICATION_JSON})您是否返回了一个JAXB对象,即标记为@XmlRootElement的对象?我使用的是postman rest客户端。但是,我也使用SOAP UI对此进行了测试。这样做,就是返回JSON。我想返回JSON,即使没有设置Accept标头。我使用的是postman rest客户端。但是,我也使用SOAP UI进行了测试。这样做,就是返回JSON。我想要的是即使未设置Accept标头也返回JSON。我使用的是postman rest客户端。但是,我也使用SOAP UI测试了这一点。这样做,就是返回JSON。我想要的是即使未设置Accept标头也返回JSON。我使用的是postman rest客户端。但是,我也使用SOAP UI测试了这一点。这样做,就是返回JSON。我所做的是想要返回JSON,即使没有设置Accept头。