Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用servlet而使用JAX-RS的情况下将json对象从ajax发布到java类?_Java_Json_Ajax_Rest_Jax Rs - Fatal编程技术网

如何在不使用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数组映射到Java
List
或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)