REST技术第四步 多个参数注解问题

经过实验,发现在使用@BeanParam注解的查询类字段上。

@FormParam@QueryParam不能同时加上去,只能加一个,否则会出现取不到数据的情况。

而且在方法参数上两个注解也不能同时加上去。同时加上是一个注解能工作,另外一个不能工作。

我做个实验。

package beanparam;
 
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
 
@Path("/{b}.htm")
public class AddRest {
	@GET
	public String process(@PathParam(value = "b") @QueryParam("b")  int b){
		return "

b = "+b+"

"; } }

REST技术第四步 多个参数注解问题_第1张图片

实验结果表明,@QueryParam的优先级高于@PathParam。不仅仅是这样,而且@PathParam好像还失去了作用。比如我把url里的数字改掉,改成字母,绝对不报错的。

 REST技术第四步 多个参数注解问题_第2张图片

这就说明取参数的注解它一定有个优先级问题,同时加在一个字段上,必定会覆盖另一个。这么做就会碰到一种很烦的情况。就是有些参数既可能来自get请求,从URL中取,又可能来自post请求,而且post请求还可能是放在URL里面的。这样的@FormParam@QueryParam同时加上去就只有一个能起作用。这是很烦的。对于这种情况,可以用@Context注解注入一个HttpServletRequest对象来调用getParameter方法来做。

此外,同一个方法,也不要同时加上@GET与@POST或其他注解注解。如果一定要的话,可以把方法内容抽出来写一个新方法。然后写两个方法,分别加上两个注解,内部调用抽出来的公共代码。

比如:

@GET

public String get(){

return business();

}

@POST

public String post(){

return business();

}

这个business就是公共代码。

你可能感兴趣的:(JAX-RS)