【问题标题】:Return simple string in web API producing application/json在生成应用程序/json 的 Web API 中返回简单字符串
【发布时间】:2017-08-16 08:05:31
【问题描述】:

在规范中,API 的答案是一个简单的字符串值,但格式是 JSON。

我正在使用泽西岛。

如果我这样构建我的答案:

return Response.ok().entity("hello").build();

它工作正常,但例如在 Firefox 的网络视图中,当我查看答案时,出现 JSON 语法错误。 如果我对这样的字符串有一些双引号:

return Response.ok().entity("\"hello\"").build();

火狐没有语法错误,但我认为这不是一个好方法。

有没有一种好方法可以为生成一些 JSON 的 API 返回一个简单的字符串值?

【问题讨论】:

  • 我认为这不是一个好方法。为什么不是好方法?
  • API 应该产生一些 JSON (application/json)。但是这个调用的规范是:对象类型:“字符串”所以我真的不知道我在做什么。我只是想知道是否有一种常见的做法。
  • @Kayaman "hello" 是一个有效的 JSON,而 {"hello"} 不是一个有效的。
  • 一旦"hello" 是一个有效的JSON,Response.ok().entity("\"hello\"").build() 就没有问题了。
  • 参见此处stackoverflow.com/questions/7705081/…“刚刚查看了 JSON 规范并从那里写入,值本身不是有效的 JSON 响应(参见 json.org)。”

标签: java json api jersey jax-rs


【解决方案1】:

如果你要生成 JSON,那么你必须返回一些 Object 或 Collection,例如:

Hello.java

public class Hello{
  public String name;
  // getter setter
}

在 YourRest.java 中

@GET
@Path("hello/{name}")
@Produces(MediaType.APPLICATION_JSON)
public String greeting(@PathParam("name") String name ){
  Hello hello = new Hello();
  hello.setName(name);
  return Response.ok().entity(hello).build();
}

@GET
@Path("people")
@Produces(MediaType.APPLICATION_JSON)
public ArrayList<String> peopleList(){
  List<String> people = new ArrayList<String>();
  Hello hello = new Hello();
  hello.setName("bloub");
  people.add(hello);
  hello.setName("Aime");
  people.add(hello);
  return Response.ok().entity(people).build();
}

http://localhost:8080/hello/bloub 将返回

{
"name" : "bloub"
}

http://localhost:8080/people 将返回

[
  {
    "name" : "bloub"
  },
  {
    "name" : "Aime"
  }
]

但如果您想返回简单文本,请使用@Produces(MediaType.TEXT_PLAIN)

例如:

在 YourRest.java 中

@GET
@Path("hello/{name}")
@Produces(MediaType.TEXT_PLAIN)
public String greeting(@PathParam("name") String name ){
  return Response.ok().entity("Hello, "+name).build();
}

http://localhost:8080/hello/bloub 将返回

Hello, bloub

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多