如何在不使用servlet而使用JAX-RS的情况下将json对象从ajax发布到java类?
我对如何在不使用servlet而使用JAX-RS的情况下将json对象从ajax发布到java类?,java,json,ajax,rest,jax-rs,Java,Json,Ajax,Rest,Jax Rs,我对JAX-RS不熟悉,我正在尝试学习有关它的新知识。我遇到了一个问题:在Java脚本中创建JSON对象,使用JAX-RS和annotations将其通过ajax发布到Java类,并从中创建JSON文件。我正在为它创建一个Maven项目。有谁能给我推荐一些这方面的教程吗。在过去的一周里,我一直在努力实现它,但什么都做不到 如有任何建议,我们将不胜感激。 我在Java中的POST注释是: @POST @Path("/post") @Consumes(MediaType.APPLICATION_JS
JAX-RS
不熟悉,我正在尝试学习有关它的新知识。我遇到了一个问题:在Java脚本中创建JSON
对象,使用JAX-RS
和annotations
将其通过ajax
发布到Java
类,并从中创建JSON
文件。我正在为它创建一个Maven
项目。有谁能给我推荐一些这方面的教程吗。在过去的一周里,我一直在努力实现它,但什么都做不到
如有任何建议,我们将不胜感激。
我在Java
中的POST注释是:
@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);
}
var passingObject = {
ID : '123456',
userEmail : 'a.a@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');
我的AJAX
POST
是:
@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);
}
var passingObject = {
ID : '123456',
userEmail : 'a.a@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)
Javascript属性映射到Java字段/属性
var obj = {
firstName: "Tejas",
lastName: "Saitwal"
}
public class MyObject {
private String firstName;
private String lastName;
// getters-setters
}
Javascript数组映射到JavaList
或Java数组
var obj = {
firstName: "Tejas",
lastName: "Saitwal",
hobbies: ["dancing", "singing"]
}
public class MyObject {
private String firstName;
private String lastName;
private List<String> hobbies;
// getters-setters
}
现在您有了一个Java类(MyObject
),它与Javascript对象清晰地映射。因此,可以将MyObject
作为方法参数
@POST
@Consumes("application/json")
public Response post(MyObject obj) {}
$.ajax({
url: url,
contentType: "application/json",
data: JSON.stringify(obj)
});
还不止这些。您需要一个提供者(或MessageBodyReader
),它知道如何将JSON反序列化到POJO中。因此,杰克逊是我的首选方式。只需添加这个Maven依赖项
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.6.0</version>
</dependency>
com.fasterxml.jackson.jaxrs
您必须将contentType设置为JSON,并且在服务端您需要像下面这样注释方法
@Produces(MediaType.APPLICATION_JSON) // produces JSON object as response
@Consumes(MediaType.APPLICATION_JSON)
我得到的数据来自HTML
页面,我正在从Java脚本
读取该页面,并将其转换为JSON
对象和Stringify
。我想为其创建一个rsevel WEB服务
。非常感谢您的帮助。请您指导我如何接受我的Java
类中的JSON
对象。@peeskillet。您是什么意思?你不需要做任何事。Jackson将JSON反序列化为MyObject
,并将其交给JAX-RS,然后JAX-RS将其交给您的方法作为参数。对于Javascript,使用小写字母(驼峰大小写表示多个单词)。在JavaPOJO中,确保getter和setter遵循Java命名约定,即字符串id代码>->公共字符串getId(),公共无效setId(字符串id)
。对于未定义的,您不会返回任何您期望的内容。如果您想测试它,只需返回相同的消息
,而不是void
,它们也应该与您的JavaScript匹配。例如,您有userEmail
,但Java属性只是getEmail()
,它应该是getUserEmail()
和setUserEmail(String email){this.userEmail=email;}
Thanks@peeskillet. 你告诉我的一切都对我有用。
@Produces(MediaType.APPLICATION_JSON) // produces JSON object as response
@Consumes(MediaType.APPLICATION_JSON)