Java RESTAPI示例
我有一个用Java编写的简单REST服务器的实现。每个API调用都返回XML格式的数据,如果希望格式为JSON,我应该怎么做?我需要外部库吗?这是我的密码: User.java:Java RESTAPI示例,java,json,web-services,rest,Java,Json,Web Services,Rest,我有一个用Java编写的简单REST服务器的实现。每个API调用都返回XML格式的数据,如果希望格式为JSON,我应该怎么做?我需要外部库吗?这是我的密码: User.java: package com.leo; import java.io.Serializable; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(n
package com.leo;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "user")
public class User implements Serializable
{
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String profession;
public User()
{
}
public User(int id, String name, String profession)
{
this.id = id;
this.name = name;
this.profession = profession;
}
public int getId()
{
return id;
}
@XmlElement
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
@XmlElement
public void setName(String name)
{
this.name = name;
}
public String getProfession()
{
return profession;
}
@XmlElement
public void setProfession(String profession)
{
this.profession = profession;
}
}
UserDao.java
package com.leo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
public class UserDao
{
public List<User> getAllUsers()
{
List<User> userList = null;
try
{
File file = new File("Users.dat");
if (!file.exists())
{
User user = new User(1, "Mahesh", "Teacher");
userList = new ArrayList<User>();
userList.add(user);
saveUserList(userList);
}
else
{
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
userList = (List<User>) ois.readObject();
ois.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
return userList;
}
public User getUser(int id){
List<User> users = getAllUsers();
for(User user: users){
if(user.getId() == id){
return user;
}
}
return null;
}
public int addUser(User pUser)
{
List<User> userList = getAllUsers();
boolean userExists = false;
for (User user : userList)
{
if (user.getId() == pUser.getId())
{
userExists = true;
break;
}
}
if (!userExists)
{
userList.add(pUser);
saveUserList(userList);
return 1;
}
return 0;
}
public int updateUser(User pUser)
{
List<User> userList = getAllUsers();
for (User user : userList)
{
if (user.getId() == pUser.getId())
{
int index = userList.indexOf(user);
userList.set(index, pUser);
saveUserList(userList);
return 1;
}
}
return 0;
}
public int deleteUser(int id)
{
List<User> userList = getAllUsers();
for (User user : userList)
{
if (user.getId() == id)
{
int index = userList.indexOf(user);
userList.remove(index);
saveUserList(userList);
return 1;
}
}
return 0;
}
private void saveUserList(List<User> userList)
{
try
{
File file = new File("Users.dat");
FileOutputStream fos;
fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(userList);
oos.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
我将您的问题解释为与REST服务(UserService.java)有关,如果这不是我们的意图,请发表评论 您必须首先确保方法中的调用实际上以JSON的形式返回结果。这将需要对User.java和UserDao.java进行适当的更改,以返回JSON而不是XML 您拥有的用户类示例是基于@XMLRootElement、@XMLElement的注释使用JavaJAXB库 您需要使用支持创建JSON对象的Java库重写此类 杰克逊图书馆是一个不错的选择。这是很好的记录 就REST服务本身而言,在UserService.java中,您需要更改服务生成的媒体类型 更改要从中生成JSON的方法注释的所有实例
@Produces(MediaType.APPLICATION_XML)
到
是的,我就是这个意思。但是我应该在User.java和UserDao.java中更改什么呢?例如,如何替换那些“@XMLRootElement”、“@XMLElement”注释?只要json中的键名与bean中的键名相同,就不需要对bean进行任何更改。否则,如果名称不匹配,请使用@JsonProperty。请参考这里的JAXB库,它们支持XML和JSON格式。Eclipselink MOXyI编辑了我的问题,现在我有另一个问题。很可能依赖项JAR没有在应用程序WAR中部署。尽管从技术上来说,如何解决这一问题是一个新问题,因为这取决于你是如何建设自己的战争的。
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class com.fasterxml.jackson.databind.ObjectMapper
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
@Produces(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_JSON)