我正在使用带有Hibernate的Spring REST,我从数据库表中获取特定记录,将id传递给我的方法。该方法工作正常,但如果表中没有记录,那么我想在变量中使用false,如果记录存在,那么我想在我的json对象中的变量中为true。
这是我的实体类 Subscribe.java
@Entity
@Table(name="subscribe")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Subscribe implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name="id")
private long id;
@Column(name="subscribed_id")
private String subID;
@Column(name="subscriber_id")
private long subrID;
public long getSubrID() {
return subrID;
}
public void setSubrID(long subrID) {
this.subrID = subrID;
}
public String getSubID() {
return subID;
}
public void setSubID(String subID) {
this.subID = subID;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
这是我的 DAO 类
@SuppressWarnings({ "unchecked", "rawtypes" })
public List<Subscribe> getSubscribeById(long id) throws Exception {
session = sessionFactory.openSession();
Criteria cr = session.createCriteria(Subscribe.class);
cr.add(Restrictions.eq("subrID", id));
List results = cr.list();
tx = session.getTransaction();
session.beginTransaction();
tx.commit();
return results;
}
这是我的控制器
@RequestMapping(value = "/subscribe/{id}", method = RequestMethod.GET)
public @ResponseBody
List<Subscribe> getSubscriber(@PathVariable("id") long id) {
List<Subscribe> sub = null;
try {
sub = profileService.getSubscribeById(id);
} catch (Exception e) {
e.printStackTrace();
}
return sub;
}
请建议我怎么能这样做
答案 0 :(得分:0)
考虑到代码的结构化方式(有效地将数据库对象直接传递给REST客户端),没有干净的方法可以做到这一点。
我认为更RESTful的方法是返回一个HTTP代码,表明找不到请求的记录。 HTTP 404将是适当的代码。
所以,在伪代码中,
@RequestMapping(value = "/subscribe/{id}", method = RequestMethod.GET)
public @ResponseBody
List<Subscribe> getSubscriber(@PathVariable("id") long id) {
List<Subscribe> sub = null;
try {
sub = profileService.getSubscribeById(id);
} catch (Exception e) {
e.printStackTrace();
}
if ( sub.isEmpty() ){
return HTTP 404 result code
} else {
return sub;
}
}
您的客户端代码需要更改以响应HTTP结果代码而不是布尔值,否则将保持不变。