我想发布一个json对象,并在调用中添加其他参数(在本例中为身份验证令牌).
这是myUrl / server中的一个简单RESTful服务器,它可以访问url myUrl / server / person / personCode / resourceName中“person”的不同资源.
GET很简单,不需要任何对象,只需要参数.
当我进入POST时问题就出现了 – 如何附加JSON,并保留其他参数?
该课程(为了清晰和专有原因,已经删除了很多…):
//Handles the person's resources @Path("/person/{personCode}/{resourceName}") public class PersonResourceProvider { @GET @Produces("application/json") public String getPersonResource(@PathParam("personCode") String personCode, @PathParam("resourceName") String resourceName, @DefaultValue("") @QueryParam("auth_token") String auth_token) throws UnhandledResourceException, UnauthorizedAccessException { //Authenticates the user in some way, throwing an exception when needed... authenticate(personCode, auth_token, resourceName); //Returns the resource somehow... } @POST @Produces("application/json") public String postPersonResource(@PathParam("personCode") String personCode, @PathParam("resourceName") String resourceName, @DefaultValue("") @QueryParam("resourceData") String resourceData, @DefaultValue("") @QueryParam("auth_token") String auth_token) throws UnhandledResourceException, UnauthorizedAccessException { //Again, authenticating authenticate(personCode, auth_token, resourceName); //Post the given resource } }
现在,当你去的时候,GET方法非常有效
myUrl / person / personCode / resourceName,它为我提供了正确的资源.
auth_token用于对服务器的每次调用(现在,通过与预定义的字符串进行比较来完成身份验证),因此需要它.除了身份验证令牌之外,所有其他参数都是通过路径提供的,身份验证令牌不应该在路径中,因为它与所需资源的身份无关.
当我进入POST时,这是一个问题.
我知道有一种方法可以告诉它消耗JSON的方法,但在这种情况下,其他参数会发生什么(auth_token是其中之一)?
我应该使用Multipart吗?
另一个相关的问题,这是我第一次设计这样的服务器,这个设计是否正确?
谢谢!
我不确定我理解你想要实现的目标.让我尝试解释一些事情 – 希望它与你的问题相关:@QueryParam注入作为路径一部分的参数 – 即“?”之后的URL部分.
例如.如果您有这样的网址:
http://yourserver.com/person/personCode/resourceName?resourceData=abc&token=1234
然后会有2个查询参数 – 一个名为resourceData,值为“abc”,另一个名为token,值为“1234”.
如果要在POST请求中传递实体,并且该实体是application / json类型,则可以使用@Consumes(“application / json”)注释简单地注释post方法,并在方法中添加另一个参数,而不是需要注释.
该参数可以是String(在这种情况下,Jersey会传递一个原始JSON字符串而你必须自己解析它)或者它可以是一个用@XmlRootElement注释注释的java bean – 在这种情况下(如果你还包括jersey-您的类路径上的json模块)Jersey将尝试使用JAXB将json字符串解组为该对象.您也可以使用Jackson或Jettison库来执行此操作 – 有关详细信息,请参阅Jersey用户指南的此部分:http://jersey.java.net/nonav/documentation/latest/json.html