我即将使用Jersey设置REST-Webservice。 目前,我对JSON中字符串或其他值类型的正确表示感到有点困惑。 这是两个片段:
@GET
@Path("user")
@Produces( MediaType.APPLICATION_JSON)
public User user() {
return new User("reini", "admin");
}
在浏览器中调用此方法将显示“良好”的JSON字符串,如下所示:
{"name":"reini","role":"admin"}
我的第二种方法如下:
@GET
@Path("hello/{name}")
@Produces( MediaType.APPLICATION_JSON)
public String hello(@PathParam("name") String name) {
return "Hello " + name + ", it is " + new Date();
}
在Browswer中调用该方法将显示一个没有任何JSON-Stuff(Curly Braces等)的纯String:
Hello firefox, it is Tue Sep 18 13:52:57 CEST 2012
我想使用dojo工具包来使用此服务。问题是,一旦我设置[handleAs:“json”] - flag,我就得到了第二种方法。它会抛出一个错误“SyntaxError:Unexpected token H”,其中“H”是返回字符串的第一个字母。
那么:Strings和其他值类型的正确json表示是什么以及我必须为我的方法设置哪些注释来生成这些?
答案 0 :(得分:5)
您应该定义DTO
并将String
放入其中。因此,您将使用一个String作为属性来使用HelloResp
类。在您的方法中填充该属性并返回。
Firefox没有显示错误,因为它没有处理您的回复。显示服务返回的内容。然而,该工具包开始将响应作为JSON处理,但没有有效的JSON(JSON以{
开头)
答案 1 :(得分:2)
您也可以将其作为:
返回@GET
@Path("hello/{name}")
@Produces( MediaType.APPLICATION_JSON)
public String hello(@PathParam("name") String name) {
return "\"Hello " + name + ", it is " + new Date()+'"';
}
但对我来说这看起来很奇怪。
为每个对象创建DTO对于一个String也看起来很奇怪。
还有更好的选择吗?
答案 2 :(得分:1)
如果要返回String,为什么要将其定义为JSON类型?
只需将其作为纯文本(MediaType.TEXT_PLAIN)返回:
@GET
@Path("hello/{name}")
@Produces( MediaType.TEXT_PLAIN)
public String hello(@PathParam("name") String name) {
return "Hello " + name + ", it is " + new Date();
}