我已经成功实现了一个与我自己的客户端一起工作的restful服务。现在,我希望将其作为其他客户也可以与之交互的服务。通过这种方式,我提出了以下问题:(我的代码快照来自我的问题,系统可以正常使用我的代码)
1-服务器和客户端之间传输的数据如何?考虑到我没有使用任何其他JAXB注释(例如@XMLElement)。有没有办法可以看到生成的JSON?
2- JAXB应该是'用于XML绑定的Java体系结构',因此,它是将数据作为XML或JSON发送(考虑到我已将请求类型指定为json)?或者,它是将对象转换为XML然后转换为客户端中的JSON,还是在服务器中,它是否获取JSON并将其转换为XML然后转换为Java对象?
3-我在我的客户端使用JAXB,但我的服务器应该得到一个json请求。是否意味着任何其他客户端如果生成带有“key”和“value”对的json可以与我的服务器交互?或者,它是否强制每个客户端使用JAXB(考虑到我的服务器中的方法具有特定对象JAXBBean的输入参数)?不幸的是,我目前不知道如何在不使用JAXB的情况下在Java中创建和发送json!所以,在问之前我无法测试这个问题。我稍后会学习它。
我的部分代码:
我用泽西岛来实现我的宁静服务。在客户端,我向服务器发送带有JAXB对象列表的帖子消息。每个JAXB对象都是这样注释的bean实例:
@XmlRootElement
public class JAXBBean {
String key;
String val;
//setters and getters (with no annotation) come here
...
}
我使用以下命令将List发送到服务器:
String response = (String) publishWR.type("application/json").post(String.class, new GenericEntity<List<JAXBBean>> (reqArr){});
// publishWR is of type: com.sun.jersey.api.client.WebResource
// reArr is of type: List<JAXBBean>
在服务器端,我有一个方法可以回答此网络资源上的帖子请求,这个方法是这样写的:
@POST
@Consumes("application/json")
public String postAnnotation(List<JAXBBean> requestArr){
String anno = "";
String user = "";
...
for(int i = 0 ; i < requestArr.size() ; i++ ){
if( requestArr.get(i).getKey().equals("annotation") )
anno = requestArr.get(i).getVal();
else if( requestArr.get(i).getKey().equals("username") )
user = requestArr.get(i).getVal();
...
}
...
}
谢谢!
答案 0 :(得分:0)
1-您可以使用浏览器下载JSON响应,并使用简单的短信(validate and format JSON)进行查看。
2-否,Jersey JSON提供程序使用Jackson直接在JSON中将对象序列化/反序列化并返回到Java对象。
3-是的,每个客户都能够阅读您的JSON响应。
答案 1 :(得分:0)
泽西岛利用Jettison库来实现这一目标。 Jettison将JSON转换为/从StAX转换,由JAXB实现处理: