3

Registration_BE 包含许多变量,例如myvariable. 我想reg_be在这里获取所有变量。像这样我必须通过我的对象。

小服务程序:

http://192.168.1.1:8084/UnionClubWS/webresources/customerregistration/?reg_be="+reg_be

网络服务:

public String getText(@PathParam("reg_be") Registration_BE reg_be ) {
   System.out.println("websevice:" +reg_be.myvariable);      
    return reg_be.myvariable;
}

上面的代码抛出了这个异常:

com.sun.jersey.spi.inject.Errors$ErrorMessagesException.....

我怎么解决这个问题?

4

2 回答 2

4

您可以使用三种典型的选项。

将对象变量传递给请求

如果您没有大量变量,或者需要仅填充 Registration_BE 中的一部分字段的能力,这将非常有用。

如果要将变量作为典型的 POST 传递到请求中,则首先需要进行一些处理来构造复杂Registration_BE对象:

public String getText(@RequestParam("reg_be.myvariable") String myvariable) {
   Registration_BE reg_be = new Registration_BE(myvariable);

   System.out.println("websevice:" +reg_be.myvariable);

   return reg_be.myvariable;
}

您可以使用以下命令调用它:

http://192.168.1.1:8084/UnionClubWS/webresources/customerregistration/?reg_be.myvariable=myvalue

或者通过传入一个变量数组:

public String getText(@RequestParam("reg_be.myvariable") String[] myvariables) {
   Registration_BE reg_be = new Registration_BE(myvariables);

   System.out.println("websevice:" +reg_be.myvariable);

   return reg_be.myvariable;
}

您可以使用以下命令调用它:

http://192.168.1.1:8084/UnionClubWS/webresources/customerregistration/?reg_be.myvariable=myvalue1&reg_be.myvariable=myvalue2

使用通用数据交换格式

第二个选项是将您的注册对象作为 JSON(或 XML)传递。为此,您需要启用 Jackson 消息转换器并确保Jackson 库在您的类路径中:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <mvc:annotation-driven />

</beans>

你的方法不会改变:

public String getText(@RequestParam("reg_be") Registration_BE reg_be ) {

   System.out.println("websevice:" +reg_be.myvariable);

   return reg_be.myvariable;
}

您现在可以使用以下命令调用它:

http://192.168.1.1:8084/UnionClubWS/webresources/customerregistration/?reg_be={"myvariable":"myvalue"}

自定义消息转换器

您的第三个也是最复杂的选项是创建您自己的消息转换器。这将为您提供最大的灵活性(您的请求可以采用您喜欢的任何形式),但会涉及更多的样板开销以使其工作。

除非您对如何构建请求数据包有非常具体的要求,否则我建议您选择上述选项之一。

于 2013-06-11T08:11:06.300 回答
2

如果你想将你的对象作为路径参数或查询参数,那么你需要将它作为字符串传递。为此,将您的对象转换为 JSON 字符串并将其作为查询参数传递。为此,这里是使用 JSON 的更好方法。

另一种更好的选择是提出您的要求POST。并将您的对象提交给POST方法。请阅读内容@FormParam

于 2013-06-11T07:33:44.517 回答