如何在不使用servlet但使用JAX-RS的情况下将json对象从ajax发布到java类? [英] How to post json object from ajax to java class without without servlet but with JAX-RS?
问题描述
我是 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屋!