14

我即将用 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();
}

在浏览器中调用该方法将显示一个没有任何 JSON 内容(花括号等)的纯字符串:

Hello firefox, it is Tue Sep 18 13:52:57 CEST 2012

我想使用 dojo 工具包使用此服务。问题是,一旦我设置了 [handleAs: "json"]-flag,我就会得到第二种方法。它向我抛出一个错误“SyntaxError: Unexpected token H”,其中“H”是返回字符串的第一个字母。

那么:字符串和其他值类型的正确 json 表示形式是什么,以及我必须为我的方法设置哪些注释才能生成这些?

4

3 回答 3

5

您应该定义 aDTO并将您String的放入其中。因此,您将拥有一个HelloResp具有一个字符串作为属性的类。在您的方法中填充该属性并返回。

您可以查看本教程。另一个教程

Firefox 没有显示错误,因为它没有处理您的响应。显示服务返回的任何内容。然而,工具包开始将响应作为 JSON 处理,但不是有效的 JSON(JSON 以 开头{

于 2012-09-18T12:17:34.237 回答
3

如果您要返回一个字符串,为什么要将其定义为 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();
}
于 2015-10-26T15:12:49.170 回答
2

您也可以将其返回为:

@GET
@Path("hello/{name}")
@Produces( MediaType.APPLICATION_JSON)
public String hello(@PathParam("name") String name) {
    return "\"Hello " + name + ", it is " + new Date()+'"';
}

但这对我来说看起来很奇怪。

为每个对象创建 DTO 对于一个字符串来说也很奇怪。

有没有更好的选择?

于 2013-08-22T09:32:59.220 回答