【发布时间】:2015-01-06 22:06:41
【问题描述】:
我的 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();
}
}
【问题讨论】:
-
此时附加调试器会更有成效。 404 在您确定您已创建的静止资源上意味着它没有正确持久化或您没有正确检索它。
-
你调试过这个吗?
-
你的控制器代码执行了吗?如果是这样, id 字段的值是多少?数据库中真的存在这个id的实体吗?
-
老实说,我从来没有调试过我的宁静服务,只使用了邮递员插件。我检查了我的 POST 方法并且它有效,GET(findEveryEmployer) 显示 2 个 id = 1 和 id = 2 的雇主,我什至用 pgadmin (SELECT * FROM praktykodawcy WHERE id_praktykodawcy=1) 检查了我的数据库,它显示正确雇主。邮递员示例:
{ "idPraktykodawcy": 1, "nazwa": "Microsoft", "nazwaDzialalnosci": "software engineering", "zaufany": true, "idAdresu": null, "adresyByIdAdresu": null }, -
是的,但调试会确认 id 1 是否已成功传递给您的 DAO。可以说记录在数据库中,但是当您将这个 id 传递给它时,您还没有验证您的代码在做什么。如果您不熟悉使用调试器,请添加一些控制台输出语句。