返回带有Jersey的String的JSON表示

时间:2012-09-18 12:12:48

标签: java javascript json dojo jersey

我即将使用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表示是什么以及我必须为我的方法设置哪些注释来生成这些?

3 个答案:

答案 0 :(得分:5)

您应该定义DTO并将String放入其中。因此,您将使用一个String作为属性来使用HelloResp类。在您的方法中填充该属性并返回。

您可以查看Tutorial。另一个tutorial

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();
}