在Java中提供restfuljsonapi

在Java中提供restfuljsonapi,java,json,web-services,api,Java,Json,Web Services,Api,在Java中提供RESTful JSON API的惯用方式是什么?您是否使用JAX-WS和XML注释(@XmlElement等)?如何将带注释的对象序列化为JSON(使用Jackson或类似的库)?如何将域对象与发送到API的对象分开 我了解Java,我希望您能为我指出关于这些主题的良好资源和最佳实践 谢谢大家! 我只想用它来节省已经完成的大量工作。 该链接适用于Play 1.2,虽然当前版本是2.1,但它也应该适用于该版本。我对Jersey和Jackson有很好的经验,即使是Android、J

在Java中提供RESTful JSON API的惯用方式是什么?您是否使用JAX-WS和XML注释(@XmlElement等)?如何将带注释的对象序列化为JSON(使用Jackson或类似的库)?如何将域对象与发送到API的对象分开

我了解Java,我希望您能为我指出关于这些主题的良好资源和最佳实践

谢谢大家!

我只想用它来节省已经完成的大量工作。
该链接适用于Play 1.2,虽然当前版本是2.1,但它也应该适用于该版本。

我对Jersey和Jackson有很好的经验,即使是Android、JBoss或Tomcat。见:


我已经使用了/JAX-RS,但我建议您使用Spring MVC 3,这不仅是为了rest api支持,也是为了其他有趣的东西,如IoC或bean,它们可能会很有用

这里有一个链接可供参考:

顺便说一句,我使用了Jackson和Spring作为解析器。:)


一点代码(如您所说,基本上用@XmlRootElement标记bean,并使用@Path标记API)

JAX-RS

豆子:

api:

弹簧

api:


JAX-WS是关于SOAP的,JAX-RS是关于REST的。也许从“”开始对您来说是一个很好的关键字。@Tichodroma谢谢您,Java世界中有这么多首字母缩写:)@Fildor我采用了一个试图提供REST API的项目。然而,在我看来,它并没有像它应该解决的那样解决问题,它需要重构。我试图在这个领域寻求最佳实践。在我的答案中添加了一些代码。:)我对服务器端的东西感兴趣。客户端不多。@JakubKulhan请参阅第三个链接。这里有一个完整的working REST服务器示例,Tomcat作为服务器,Android在客户端。啊,谢谢!另一件事是模型对象和API中公开的对象的耦合。目前,我得到的项目将API中公开的内容与其内部对象紧密地结合在一起。当某些东西发生变化时,API的破坏几乎是肯定的。如何将它们解耦?两个独立的对象层次结构?目前,它将只是重写一切再次。但在未来,这种等级制度可能会改变。谢谢!另一件事是如何将域对象与暴露于API的对象分开?你会如何版本API?通常我会把域对象放在一个“模型”包中;如果您有特定的api对象,请将它们放在api的同一个包下。对于版本控制,最佳实践是始终从版本名开始,如/api/v1/{myApi}.:)
@XmlRootElement
public class Response {

  private String result;
  private String message;

  //getter and setter
}
@Path("rest/user")
@Produces(MediaType.APPLICATION_JSON)
public class UserService {

  @POST
  @Path("/login")
  public Response login(
        @FormParam("username") String username,
        @FormParam("password") String password
  ) {
      // Your logic here
  }
}
@Controller
@RequestMapping("/user")
public class UserService {

  @RequestMapping(method = RequestMethod.POST, value="/login", headers="Accept=application/json")
  public @ResponseBody Response login(
        @RequestParam(value = "user", defaultValue = "") String email,
        @RequestParam(value = "password", defaultValue = "") String password,
        HttpServletRequest request
        ) {
    // Your logic here
  }
}