如何在不使用servlet但使用JAX-RS的情况下将json对象从ajax发布到java类?

我是JAX-RS新手,我正在努力学习新的东西。 我遇到了一个问题,在Java Script创建一个JSON对象,使用JAX-RSannotations通过ajax将它发布到Java类,并从中创建一个JSON文件。 我正在为它创建一个Maven项目。 任何人都可以建议我任何教程。 我试图从过去1周开始实施,但无法做任何事情。

任何建议赞赏。 我在Java POST annotation是:

 @POST @Path("/post") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public void post(Message obj){ System.out.println("in post"); String v_id = obj.getID(); String v_email = obj.getEmail(); String v_checkedornot = obj.getCheckedOrNot(); System.out.println("id " + v_id +" email " + v_email + " checkedornot " + v_checkedornot); } 

我的AJAX POST是:

 var passingObject = { ID : '123456', userEmail : 'aa@a', ApproverFlag : 'true' } var passobj = JSON.stringify(passingObject); $.ajax({ url: './webapi/messages/post', type: 'POST', contentType:"application/json", data: passobj, dataType:'json', success:function(data){ alert(JSON.stringify(data)); } },'json'); 

只需将Javascript对象映射到Java对象即可。 这是基本的映射。 这很简单。

Javascript对象映射到Java对象(或POJO)

 var obj = {}; public class MyObject {} 

Javascript属性映射到Java字段/属性

 var obj = { firstName: "Tejas", lastName: "Saitwal" } public class MyObject { private String firstName; private String lastName; // getters-setters } 

Javascript数组映射到Java List或Java数组。

 var obj = { firstName: "Tejas", lastName: "Saitwal", hobbies: ["dancing", "singing"] } public class MyObject { private String firstName; private String lastName; private List hobbies; // getters-setters } 

Javascript嵌套对象映射到Java嵌套对象

 var obj = { firstName: "Tejas", lastName: "Saitwal", hobbies: ["dancing", "singing"], address: { street: "1234 main st", city: "NYC" } } public class MyObject { private String firstName; private String lastName; private List hobbies; private Address address; // getters-setters } public class Address { private String street; private String city; } 

Javascript对象列表映射到Java ListType[]

 var obj = { firstName: "Tejas", lastName: "Saitwal", hobbies: ["dancing", "singing"], address: { street: "1234 main st", city: "NYC" }, friends: [ { name: "friend1", phone: "123456578" }, { name: "friend2", phone: "123454567" } ] } public class MyObject { private String firstName; private String lastName; private List hobbies; private Address address; private List friends; // getters-setters } public class Address { private String street; private String city; } public class Friend { private String name; private String phone; } 

现在你有了一个Java类( MyObject ),可以用Javascript对象干净地映射。 因此,您可以将MyObject作为方法参数。

 @POST @Consumes("application/json") public Response post(MyObject obj) {} $.ajax({ url: url, contentType: "application/json", data: JSON.stringify(obj) }); 

那不是全部。 您需要一个知道如何将JSON反序列化到POJO中的提供程序(或MessageBodyReader )。 因为jackson是我的首选方式。 只需添加此Maven依赖项

  com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider 2.6.0  

然后你需要在你的应用程序中注册JacksonJsonProvider 。 有很多方法可以做到,但不知道你正在使用的JAX-RS实现和版本,我将不得不列出所有不同的方式。 因此,如果您不确定如何注册它,请告诉我您正在使用的JAX-RS实现,实现的版本,并展示您当前如何配置应用程序(即web.xml或Java配置)。

也可以看看:

  • 在JAX-RS中将JSON解组为Java POJO

您必须将contentType设置为JSON,并且在服务端您需要注释方法,如下所示

 @Produces(MediaType.APPLICATION_JSON) // produces JSON object as response @Consumes(MediaType.APPLICATION_JSON)