当前位置 : 主页 > 网页制作 > HTTP/TCP >

在Jersey一般设计问题中使用附加参数发布/放置/删除http Json

来源:互联网 收集:自由互联 发布时间:2021-06-16
出于某种原因,我还没有找到任何正常的方法来执行以下操作: 我想发布一个json对象,并在调用中添加其他参数(在本例中为身份验证令牌). 这是myUrl / server中的一个简单RESTful服务器,它可
出于某种原因,我还没有找到任何正常的方法来执行以下操作:

我想发布一个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

网友评论