JAX-REST的新手(jersey 1.8 impl)
我有一个资源课程"/你好"
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";
}
}
Run Code Online (Sandbox Code Playgroud)
当我发送的请求有一个头Content-Type : text/html,我希望无论是@Produces和@Consumes注解的方法thankYouHTML()和thankYouInputHTML()被调用.
但只有@Produces thankYouHTML()方法被调用?为什么?为什么@Consumes注释方法thankYouHInputTML()也没有被称为?
你应该记住:
JAX-RS 运行时尝试匹配:
HTTP方法(GET,POST,...)与适当的注解(@GET,@POST,...);
'/api/something'使用正确的@Path注释请求path();
具有适当注释的http content-type头(链接)@Consumes;
accept具有propper @Produces注释的http 标头;
因此(例如)@Produces注释并不表示带注释的方法会产生某些东西.它表示当匹配accept header将包含在请求中时将执行该方法.
如果您需要更多信息,请参阅RestFull webservices我建议您阅读以下资源:
| 归档时间: |
|
| 查看次数: |
14773 次 |
| 最近记录: |