【问题标题】:what's wrong with my simple JSON JAX-RS web service?我的简单 JSON JAX-RS Web 服务有什么问题?
【发布时间】:2012-03-02 18:17:23
【问题描述】:

我有一个用 Apache Wink 1.0 编写的简单 Web 服务,我想接收和返回 JSON 数据。

根据 Wink 文档,这应该可以工作...

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public JSONObject postJSON(JSONObject requestJSON) {
  JSONObject jobj = new JSONObject();
  return jobj;
}

...但是当我尝试访问网络服务时看到此错误...

org.apache.wink.server.internal.handlers.PopulateResponseMediaTypeHandler - 
Content-Type not specified via Response object or via @Produces annotation 
so automatically setting via generic-type compatible MessageBodyWriter providers

...非常感谢任何意见或建议!

罗伯

【问题讨论】:

  • 你试过"application/json"吗?
  • 是的,试过了,结果一样。
  • 奇怪的错误。定义看起来是正确的,除了如果那是一个 org.json.JSONObject 那么我不确定它是可序列化的。尝试将返回类型更改为字符串,以确保至少所有路径都是正确的。另外,如果可以,请张贴您的通话签名。
  • 将返回更改为 String 类型给了我同样的错误。不确定“调用签名”是什么,该类用“@Path(value="/customers")”注释,我使用 URL 热服务:“localhost:9080/testWeb/ws/customers”-我有一个纯文本 GET 工作正常相同的课程,但无法让 JSON 运行。 :(
  • @RobertHume - 调用签名通常是 http 动词、请求 url 和标头。它应该类似于GET http://localhost:9080/testWeb/ws/customers HTTP/1.1 ... <headers>

标签: java json jax-rs apache-wink


【解决方案1】:

JSONObject 的用法有点奇怪。更简单、更灵活的方法:

public MyDto postJSON(MyDto dto) {
  //do something
  MyDto md = new MyDto();
  return md;
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class MyDto {
  private String f1;
  private int f2;
  //etc.
}

JAX-RS 会将 MyD 序列化为 JSON。实际上,更简洁的方法是返回 Response 对象

public Response postJSON(MyDto dto) {
    //do something
    MyDto md = new MyDto();
    return Response.ok(md);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    相关资源
    最近更新 更多