返回带有Jersey的String的JSON表示

Rei*_*ini 13 javascript java dojo json jersey

我即将与Jersey建立一个REST-Webservice.目前,我对JSON中字符串或其他值类型的正确表示感到有点困惑.这是两个片段:

@GET
@Path("user")
@Produces( MediaType.APPLICATION_JSON)
public User user() {
    return new User("reini", "admin");
}
Run Code Online (Sandbox Code Playgroud)

在浏览器中调用此方法将显示"良好"的JSON字符串,如下所示:

{"name":"reini","role":"admin"}
Run Code Online (Sandbox Code Playgroud)

我的第二种方法如下:

@GET
@Path("hello/{name}")
@Produces( MediaType.APPLICATION_JSON)
public String hello(@PathParam("name") String name) {
    return "Hello " + name + ", it is " + new Date();
}
Run Code Online (Sandbox Code Playgroud)

在Browswer中调用该方法将显示一个没有任何JSON-Stuff(Curly Braces等)的纯String:

Hello firefox, it is Tue Sep 18 13:52:57 CEST 2012
Run Code Online (Sandbox Code Playgroud)

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

那么:Strings和其他值类型的正确json表示是什么?我必须为我的方法设置哪些注释来生成这些?

bas*_*mes 5

你应该定义一个DTO并把它放进去String.因此,您将拥有一个HelloResp具有一个String作为属性的类.在您的方法中填充该属性并返回.

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

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

  • “JSON 以 { 开头” - 不正确。根据 http://json.org,即使是带引号的字符串文字也是有效的 JSON,并且 jersey 应该支持将字符串正确序列化为 JSON 字符串。 (2认同)