我查看了文档Jackson http://wiki.fasterxml.com/JacksonInFiveMinutes,这让我很困惑:(
我的实体看起来像:
@Entity
@Table(name = "variable")
public class Variable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(unique = true, nullable = false)
private String name;
@Column
@Enumerated(EnumType.STRING)
private VariableType type;
@Column(nullable = false)
private String units;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_on", nullable = false)
private Date createdOn;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "retired_on", nullable = true)
private Date retiredOn;
@Column(nullable = false)
private boolean core;
}
and my JAX-RS
服务看起来像
@Path("/variable")
public class VariableResource {
@Inject private VariableManager variableManager;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getVariables() {
return Response.ok(variableManager.getVariables()).build();
}
}
当我使用测试此服务时curl http://localhost:8080/app/rest/variable
,我在服务器日志中看到以下内容
[javax.ws.rs.core.Application]] (http--127.0.0.1-8080-6) Servlet.service() for servlet javax.ws.rs.core.Application threw exception: java.lang.NoSuchMethodError: org.codehaus.jackson.type.JavaType.<init>(Ljava/lang/Class;)V
有哪些最简单的方法可以将变量列表返回为 JSON?
通常它就像添加一样简单@XmlRootElement
在您的实体上(我可以看到您正在使用 JPA/Hibernate@Entity
/@Table
,但你错过了@XmlRootElement
).
@Entity
@Table(name = "variable")
@XmlRootElement
public class Variable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(unique = true, nullable = false)
private String name;
// ...
@Column(nullable = false)
private boolean core;
}
这是为了服务,使用Response
来自 JAX-RS,并且还直接返回一个将由 JAX-RS 自动封送的对象:
@Path("/variable")
public class VariableResource {
@Inject private VariableManager variableManager;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getVariables() {
return Response.ok(variableManager.getVariables()).build();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
// Same method but without using the JAX-RS Response object
public List<Variable> getVariablesAlso() {
return variableManager.getVariables();
}
}
通常人们会创建一个DTO http://en.wikipedia.org/wiki/Data_transfer_object以避免将实体的内部值从数据库暴露到现实世界,但这不是强制性的,如果您可以暴露整个对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)