0

我正在将 Spring REST 与 Hibernate 一起使用,并且我正在从数据库表中获取特定记录,并将 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;
}

请建议我该怎么做

4

1 回答 1

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 结果代码而不是布尔值,否则将保持不变。

于 2015-07-27T11:57:29.667 回答