返回带有泽西岛的字符串的 JSON 表示形式

2022-09-04 03:52:55

我即将使用 Jersey 设置一个 REST-Web 服务。目前,我对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(大括号等):

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

我想在 Dojo 工具包中使用此服务。问题是,一旦我设置了[handleAs:“json”]-flag,我就得到了第二种方法。它给我一个错误“语法错误:意外的令牌H”,其中“H”是返回字符串的第一个字母。

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


答案 1

你应该定义一个并把你的放在那个。因此,您将使用一个字符串作为属性的类。在您的方法中,填充该属性并返回。DTOStringHelloResp

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

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


答案 2

如果要返回字符串,为什么要将其定义为 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();
}