如何在不使用servlet但使用JAX-RS的情况下将json对象从ajax发布到java类? [英] How to post json object from ajax to java class without without servlet but with JAX-RS?

查看:150
本文介绍了如何在不使用servlet但使用JAX-RS的情况下将json对象从ajax发布到java类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



任何建议表示赞赏。
我的 POST注释 Java 中是:

  @POST 
@Path(/ post)
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public void post(Message obj){
System.out.println(post 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 / message / 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 = {}; 

公共类MyObject {}

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

  var obj = {
firstName:Tejas,
lastName:Saitwal
}

public class MyObject {
private String firstName;
private String lastName;
// getters-setters
}

Javascript数组映射到Java 列表或Java数组。

  var obj = {
firstName: Tejas,
lastName:Saitwal,
爱好:[跳舞,唱歌]
}

公共类MyObject {
private String firstName;
private String lastName;
private List< String>爱好;
// getters-setters
}

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

  var obj = {
firstName:Tejas,
lastName:Saitwal,
爱好:[跳舞,唱歌],
地址:{
street:1234 main st,
city:NYC
}
}

public class MyObject {
private String firstName;
private String lastName;
private List< String>爱好;
私人地址;
// getters-setters
}
公共类地址{
private String street;
private String city;
}

Javascript对象列表映射到Java 列表<类型> ; 输入[]

  var obj = {
firstName:Tejas,
lastName:Saitwal,
爱好:[跳舞,唱歌],
地址:{
街道:1234主街,
城市:NYC
},
网友:[
{名称:friend1,电话:123456578},
{name:friend2,phone:123454567}
]
}

public class MyObject {
private String firstName;
private String lastName;
private List< String>爱好;
私人地址;
private List< Friend>朋友;
// getters-setters
}
公共类地址{
private String street;
private String city;
}
公共类朋友{
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 )。因为杰克逊是我的首选方式。只需添加此Maven依赖项

 < dependency> 
< groupId> com.fasterxml.jackson.jaxrs< / groupId>
< artifactId> jackson-jaxrs-json-provider< / artifactId>
< version> 2.6.0< / version>
< / dependency>

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

另见:




I am new to JAX-RS, I am trying to learn new things about it. I am stuck with one issue regarding, creating a JSON object in Java Script, posting it through ajax to a Java class using JAX-RS and annotations and creating a JSON file out of it. I am creating a Maven project for it. Can anyone please suggest me any tutorial for this. I am trying to implement it from past 1 week but unable to do anything.

Any suggestions appreciated. My POST annotation in Java is:

@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);
}

And my AJAX POST is:

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');

解决方案

Just map the Javascript objects to Java objects. Here is basic mapping. It's pretty simple.

Javascript Object maps to Java object (or POJO)

var obj = {};

public class MyObject {}

Javascript properties map to Java fields/properties

var obj = {
    firstName: "Tejas",
    lastName: "Saitwal"
}

public class MyObject {
    private String firstName;
    private String lastName;
    // getters-setters
}

Javascript arrays map to Java List or Java array.

var obj = {
    firstName: "Tejas",
    lastName: "Saitwal",
    hobbies: ["dancing", "singing"]
}

public class MyObject {
    private String firstName;
    private String lastName;
    private List<String> hobbies;
    // getters-setters
}

Javascript nested objects map to Java nested objects

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<String> hobbies;
    private Address address;
    // getters-setters
}
public class Address {
    private String street;
    private String city;
}

Javascript lists of objects map to Java List<Type> or Type[]

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<String> hobbies;
    private Address address;
    private List<Friend> friends;
    // getters-setters
}
public class Address {
    private String street;
    private String city;
}
public class Friend {
    private String name;        
    private String phone;
}

Now you have a Java class (MyObject) that maps cleanly with the Javascript object. So you can have MyObject as a method parameter.

@POST
@Consumes("application/json")
public Response post(MyObject obj) {}

$.ajax({
    url: url,
    contentType: "application/json",
    data: JSON.stringify(obj)
});

That's not all. You need a provider (or MessageBodyReader) that knows how to deserialize the JSON into your POJO. For that Jackson is my preferred way to go. Just add this Maven dependency

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.6.0</version>
</dependency>

Then you need to register the JacksonJsonProvider with your application. There are a bunch of ways this can be done, but without know the JAX-RS implementation and version you are using, I would have to list all the different ways. So if you are unsure about how to register it, please let me know the JAX-RS implementation you are using, the version of the implementation, and show how you are currently configuring your application (i.e. web.xml or Java config).

See Also:

这篇关于如何在不使用servlet但使用JAX-RS的情况下将json对象从ajax发布到java类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆