JAX-REST中的新手(jersey 1.8 impl)
我有一个资源课程“/ hello”
package com.lbs.rest;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@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";
}
}
当我发送带有标头Content-Type : text/html
的请求时,我希望调用@Produces
和@Consumes
注释方法thankYouHTML()
和thankYouInputHTML()
。
但只调用@Produces thankYouHTML()
方法?为什么?为什么@Consumes
带注释的方法thankYouHInputTML()
也被称为?
答案 0 :(得分:6)
你应该记住:
JAX-RS
运行时尝试匹配:
http方法(GET
,POST
,...),带有正确的注释(@GET
,@POST
,...);
使用正确的'/api/something'
注释请求路径(@Path
);
http content-type
标题(link),其中包含正确的@Consumes
注释;
带有propper accept
注释的http @Produces
标头;
因此(例如)@Produces
注释并不表示带注释的方法会产生某些东西。它表示当匹配accept header
将包含在请求中时将执行该方法。
如果您需要更多信息,请参阅RestFull webservices我建议您阅读以下资源: