在RESTful Web服务中添加删除方法

时间:2015-04-01 22:22:31

标签: java mysql rest

我正在制作我的第一个RESTful Web服务(使用MySQL)。但我不知道如何通过id从表中删除记录。

这是我到目前为止所做的:

  1. 按ID搜索某人并以XML格式返回结果(ID,姓名和年龄):

    private PersonDao personDao = new PersonDao();
    //method which return a single person in xml
    @GET
    @Path("/getPersonByIdXML/{id}")
    @Produces(MediaType.APPLICATION_XML)
    public Person getPersonByIdXML(@PathParam("id")int id){
        return personDao.getPersonById(id);
    }
    
    // return JSON response
    
  2. 按ID搜索某人并以JSON格式返回结果(ID,姓名和年龄):

    @GET
    @Path("/getPersonByIdJSON/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Person getPersonById(@PathParam("id")int id){
        return personDao.getPersonById(id);
    }
    
  3. 输出所有人并以JSON格式返回结果(id,全名和年龄):

    // the method returns list of all persons
    @GET
    @Path("/getAllPersonsInXML")
    @Produces(MediaType.APPLICATION_XML)
    public List<Person> getAllPersonsInXML(){
        return personDao.getAllPersons();
    }
    
  4. 在数据库中插入一个人:

    //insert
    @GET
    @Path("/insertPerson/{fullName}/{age}")
    @Produces(MediaType.APPLICATION_JSON)
    public String saveNewPerson(@PathParam("fullName") String fullName, @PathParam("age") int age) {
        Person person = new Person();
    
        person.setFullName(fullName);
        person.setAge(age);
    
        if (!personDao.savePerson(person)) {
            return "{\"status\":\"ok\"}  id="+person.getId();
        }
        else {
            return "{\"status\":\"not ok\"}";
        }
    }
    
  5. 编辑数据库中的人员:

    //update
    @GET
    @Path("/insertPerson/{id}/{fullName}/{age}")
    @Produces(MediaType.APPLICATION_JSON)
    public String updatePerson(@PathParam("id") int id, @PathParam("fullName") String fullName, @PathParam("age") int age) {
        Person person = new Person();
        person.setId(id);
        person.setFullName(fullName);
        person.setAge(age);
    
        if (!personDao.savePerson(person)) {
            return "{\"status\":\"ok\"}";
        }
        else {
            return "{\"status\":\"not ok\"}";
        }    
    }
    

2 个答案:

答案 0 :(得分:4)

如果您想要DELETE资源:

@DELETE
@Path("/{id}")
public void deleteById(@PathParam("id")int id){
   personDao.deleteById(id);
}

只要您构建了deleteById方法,那就谢谢!

建议:

  • 您的插入是GET。因为你正在创造一些东西,所以应该真的是一个POST。
  • 您的更新是GET。应该真的是一个PUT。 玩得开心,坚持下去!!

答案 1 :(得分:0)

此方法适用于getPersonById:

    public Person getPersonById(int id) {
    Person person = null;
    Session session = null;

    try {
        session = sessionFactory.openSession();
        session.beginTransaction();
        person = (Person) session.createQuery("from Person p where p.id = :ID").setParameter("ID", id).uniqueResult();
        session.getTransaction().commit();
    } catch (Exception ex) {
        if (session != null) {
            session.getTransaction().rollback();
        }
    } finally {
        if (session != null) {
            session.close();
        }
    }
    return person;
}

此删除方法:

    public void deleteById(int id) {
    Person person = null;
    Session session = null;
    try {
        session = sessionFactory.openSession();
        session.beginTransaction();
        person = (Person) session.createQuery("delete Person p where p.id = :ID");
        session.getTransaction().commit();
    } catch (Exception ex) {
        if (session != null) {
            session.getTransaction().rollback();
        }
    } finally {
        if (session != null) {
            session.close();
        }
    }
}

deleteById不起作用,输出错误204没有内容,如何正确删除deleteById,谢谢