CRUD / Restful API - > GET / DELETE不起作用

时间:2015-01-06 22:06:42

标签: java spring rest jpa crud

我的API出现问题,我已经制作了新的实体,DAO,服务和控制器。 POST(addEmployer)和GET(findEveryEmployer)工作没有问题。但是通过ID查找和按ID删除的内容并不起作用,我无法找到错误。我使用邮递员测试我的休息服务," api / praktykodawcy / 1" GET或DELETE显示NOT_FOUND(是的,至少有2名雇员在数据库中有正确的ID)

这是控制器的代码

@Controller
@RequestMapping(value = "/praktykodawcy")
public class PraktykodawcyController {

    private iPraktykodawcyService ipraktykodawcyService;

    @Autowired
    PraktykodawcyController(iPraktykodawcyService ipraktykodawcyService) {
        this.ipraktykodawcyService = ipraktykodawcyService;
    }

    @RequestMapping(method = RequestMethod.POST)
    public ResponseEntity<PraktykodawcyEntity> addEmployeer (@RequestBody PraktykodawcyEntity praktykodawcyEntity) throws Exception {
        try {
            PraktykodawcyEntity newEmployeer = ipraktykodawcyService.addEmployeer(praktykodawcyEntity);
            return new ResponseEntity<PraktykodawcyEntity>(newEmployeer, HttpStatus.CREATED);
        }
        catch (Exception e){
            throw new Exception(e);
        }
    }

    @RequestMapping(method = RequestMethod.GET)
    public ResponseEntity<List<PraktykodawcyEntity>> findEveryEmployeer () {
        List<PraktykodawcyEntity> list = ipraktykodawcyService.findEveryEmployeer();
        return new ResponseEntity<List<PraktykodawcyEntity>>(list, HttpStatus.OK);
    }

    @RequestMapping(value = "/{idPraktykodawcy}", method = RequestMethod.GET)
    public ResponseEntity<PraktykodawcyEntity> findByIdPraktykodawcy(@PathVariable int idPraktykodawcy) {
        PraktykodawcyEntity praktykodawcyEntity = ipraktykodawcyService.findEmployeer(idPraktykodawcy);
        if(praktykodawcyEntity !=null) {
            return new ResponseEntity<PraktykodawcyEntity>(praktykodawcyEntity, HttpStatus.OK);
        }
        else {
            return new ResponseEntity<PraktykodawcyEntity>(HttpStatus.NOT_FOUND);
        }
    }

    @RequestMapping(value = "/{idPraktykodawcy}", method = RequestMethod.DELETE)
    public ResponseEntity<PraktykodawcyEntity> deleteEmployeer(@PathVariable int idPraktykodawcy) {
        PraktykodawcyEntity praktykodawcyEntity = ipraktykodawcyService.deleteEmployeer(idPraktykodawcy);
        if(praktykodawcyEntity !=null) {
            return new ResponseEntity<PraktykodawcyEntity>(praktykodawcyEntity, HttpStatus.OK);
        }
        else {
            return new ResponseEntity<PraktykodawcyEntity>(HttpStatus.NOT_FOUND);
        }
    }
}

服务:

@Service
@Transactional
public class PraktykodawcyService implements iPraktykodawcyService {

    @Autowired
    private iPraktykodawcyDAO ipraktykodawcyDAO;

    @Override
    public PraktykodawcyEntity addEmployeer(PraktykodawcyEntity praktykodawcyEntity) {
        return ipraktykodawcyDAO.addEmployeer(praktykodawcyEntity);
    }

    @Override
    public PraktykodawcyEntity updateEmployeer(int idPraktykodawcy, PraktykodawcyEntity praktykodawcyEntity) {
        return ipraktykodawcyDAO.updateEmployeer(idPraktykodawcy, praktykodawcyEntity);
    }

    @Override
    public PraktykodawcyEntity deleteEmployeer(int idPraktykodawcy) {
        return ipraktykodawcyDAO.deleteEmployeer(idPraktykodawcy);
    }

    @Override
    public PraktykodawcyEntity findEmployeer(int idPraktykodawcy) {
        return ipraktykodawcyDAO.findEmployeer(idPraktykodawcy);
    }

    @Override
    public List<PraktykodawcyEntity> findEveryEmployeer() {
        return ipraktykodawcyDAO.findEveryEmployeer();
    }

    @Override
    public List<PraktykodawcyEntity> findByIdAdresu(int idAdresu) {
        return ipraktykodawcyDAO.findByIdAdresu(idAdresu);
    }
}

和DAO

@Repository
public class PraktykodawcyDAO implements iPraktykodawcyDAO {
@PersistenceContext
EntityManager em;

@Override
public PraktykodawcyEntity addEmployeer(PraktykodawcyEntity praktykodawcyEntity) {
    em.persist(praktykodawcyEntity);
    return praktykodawcyEntity;
}

@Override
public PraktykodawcyEntity updateEmployeer(int idPraktykodawcy, PraktykodawcyEntity praktykodawcyEntity) {
    em.merge(praktykodawcyEntity);
    return praktykodawcyEntity;
}

@Override
public PraktykodawcyEntity deleteEmployeer(int idPraktykodawcy) {
    PraktykodawcyEntity praktykodawcyEntity = em.find(PraktykodawcyEntity.class, idPraktykodawcy);
    if(praktykodawcyEntity !=null) {
        em.remove(praktykodawcyEntity);
        return praktykodawcyEntity;
    }
    else {
        return null;
    }
}

@Override
public PraktykodawcyEntity findEmployeer(int idPraktykodawcy) {
    return em.find(PraktykodawcyEntity.class, idPraktykodawcy);

}

@Override
public List<PraktykodawcyEntity> findEveryEmployeer() {
    Query query = em.createQuery("SELECT e FROM PraktykodawcyEntity e");
    return query.getResultList();
}

@Override
public List<PraktykodawcyEntity> findByIdAdresu(int idAdresu) {
    Query query = em.createQuery("SELECT e FROM PraktykodawcyEntity e WHERE e.adresyByIdAdresu.idAdresu=?1");
    query.setParameter(1, idAdresu);
    return query.getResultList();
}

}

2 个答案:

答案 0 :(得分:0)

您需要将变量名称赋予@PathVariable注释。 试试这个:

public ResponseEntity<PraktykodawcyEntity> 
    findByIdPraktykodawcy(@PathVariable("idPraktykodawcy") int idPraktykodawcy)

答案 1 :(得分:0)

好的伙计们,我发现了什么是错的,首先我在代码中编写了一对prinln来检查id是否正确通过所有模块,一切都是正确的。但后来我检查了实体,看到@OneToMany没有被评论,它正在搜索与另一个实体的这种关系,但该实体得到了@ManyToOne评论和休眠并没有大喊这样的事情。现在开始工作,现在让这个双向工作正常工作,感谢大家快速回答。