休息| MIME类型:接受订单

时间:2013-06-17 13:30:34

标签: java rest mime-types

用于暴露资源的类“/ hello”:

@Path("/hello")
public class Test {


    //-- produces MIME type text/plain
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public  String thankYouTxt(){
        System.out.println("thankYouTxt");

        return "thankYouTxt\n";
    }

    //-- consumes MIME type text/plain
    @GET
    @Consumes(MediaType.TEXT_PLAIN)
    public String thankYouInputTxt(){
        System.out.println("thankYouInputTxt");
        return "thankYouInputTxt";

    }


    //-- produces MIME type text/html
    @GET
    @Produces(MediaType.TEXT_HTML)
    public  String thankYouHTML(){
        System.out.println("thankYouHTML"); 
        return "thankYouTxtHTML";
    }


    //-- consumes MIME type text/html
    @GET
    @Consumes(MediaType.TEXT_HTML)
    public  void thankYouInputHTML(){
        System.out.println("thankYouInputHTML");
        //return "thankYouInputHTML";
    }



    //-- produces MIME type text/xml 
    @GET
    @Produces(MediaType.TEXT_XML)
    public  String thankYouXML(){
        System.out.println("thankYouXml");
        return "<?xml version=\"1.0\"?> <message>thankYouTxt</message>";
    }
    //-- consumes MIME type text/xml    
    @GET
    @Consumes(MediaType.TEXT_XML)
    public String thankYouInputXML(){
        System.out.println("thankYouInputXML");
        return "thankYouInputXML";
    }



}

Api docu上说明了MIME接受顺序:

  

如果资源类能够生成多个MIME媒体   类型,所选择的资源方法将对应最多   客户声明的可接受的媒体类型。进一步来说,   HTTP请求的Accept标头声明了最多   可以接受的。例如,如果Accept标头是Accept:text / plain,   将调用doGetAsPlainText方法。或者如果   Accept标头是Accept:text / plain; q = 0.9,text / html,声明   客户端可以接受text / plain和text / html的媒体类型,   但更喜欢后者,那么将调用doGetAsHtml方法。

谁/什么决定使用哪种MIME类型(text / html)而不是另一种(text / html)?

1 个答案:

答案 0 :(得分:1)

好的,重新记录文档,因为似乎存在误解:

  

所选择的资源方法将对应于客户端声明的最可接受的媒体类型

然后:

  

HTTP请求的Accept标头声明[s]最可接受的

此标题具有以下形式:

Accept: media/type1[;q=pref], media/type2[;q=pref], etc etc

未提及q时为1.0。

如果您有使用方法生成的请求,例如foo/bartar/feathers,如果accept标头声明第一个接受1而第二个接受0,则生成{{1 }} 会跑。另一方面,如果第一个接受0.5,但第二个接受0.6,那么......你得到了图片。

如果没有真正偏好的类型会发生什么,文档甚至都没有说。但是客户应该首先决定自己。