我有一个关于JAX-RS的项目(作业)。我正在使用NetBeans,Jersey和Tomcat。
这是我系统中主要对象的“用户”类。
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="user")
public class User {
//@XmlElement
//public int id ;
@XmlElement
public String username;
@XmlElement
public String fullname;
@XmlElement
public String gender;
@XmlElement
public String birthDate;
public User(){
}
public User(String username,String fullname, String gender,String birthDate){
//this.id = id;
this.username = username;
this.fullname = fullname;
this.gender = gender;
this.birthDate = birthDate;
}
}
这是我的“JAXBContextResolver”类
import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.api.json.JSONJAXBContext;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;
@Provider
public class JAXBContextResolver implements ContextResolver<JAXBContext>{
private JAXBContext context;
private Class[] types = {User.class};
public JAXBContextResolver() throws Exception {
this.context =
new JSONJAXBContext( JSONConfiguration.mapped().build(), types);
}
@Override
public JAXBContext getContext(Class<?> objectType) {
for (Class type : types) {
if (type == objectType) {
return context;
}
}
return null;
}
}
这是我在“UserService”类中的post方法
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<User> createNewUser(User tUser) {
List<User> list = new ArrayList<User>();
list.add(tUser);
return list;
}
当我在使用RESTClient(Firefox附加组件)的localhost中尝试发布新用户时,我的请求正文是这样的json输入:
{"user":{"username":"blabla","fullname":"blabla","gender":"M","birthDate":"05.01.1978"}}
在post方法(在UserService类中)必须变量“tUser”自动填充即将到来的输入? “tUser”变量在调试模式中显示空元素,如:
如果我知道错误,有人可以纠正我吗?为什么这个值显示为null?他们不能显示“blabla” - “blabla” - “M” - “05.01.1878”?你能帮帮我吗?
答案 0 :(得分:2)
我解决了这个问题;在JAXBContextResolver类中,我改变了这样的方法:
public JAXBContextResolver() throws Exception {
this.context =
new JSONJAXBContext( JSONConfiguration.mapped().rootUnwrapping(false).build(), types);
}
与第一个的区别在于添加“rootUnwrapping(false)”表达式。
答案 1 :(得分:0)
@XmlRootElement
在您的示例中不起作用。发送
{"username":"blabla","fullname":"blabla","gender":"M","birthDate":"05.01.1978"}
代替
的修改
1)
public List<User> createNewUser(Request tUser)
和班级
class Request
{
public User user;
}
2)
public List<User> createNewUser(String tUser)
并使用String
或google-gson
jackson json processor
转换为对象