我正在用弹簧引导创建一个简单的crud。所有功能都很好,但是findOne(长id)方法有一点小问题。
在“邮递员”中,当我把这个url:放在一起时,我得到了这个例外:
"error":“内部服务器错误”,
"exception":"org.springframework.dao.InvalidDataAccessApiUsageException",
"message":“给定的id不能为空!;嵌套的异常是java.lang.IllegalArgumentException:给定的id不能为空!”,
这是我的代码:
仓库
@SuppressWarnings("unused")
@Repository
public interface UserRepository extends JpaRepository<Utilisateur, Long> {
}
服务
public interface UserService {
Utilisateur save(Utilisateur utilisateur);
List<Utilisateur> findAll();
Utilisateur findOne(Long id);
}
ServiceImpl
@Service
public class UserServiceImpl implements UserService{
@Autowired
UserRepository userRepository;
public UserServiceImpl() {
}
public UserServiceImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public Utilisateur save(Utilisateur utilisateur) {
return userRepository.save(utilisateur);
}
@Override
public List<Utilisateur> findAll() {
return userRepository.findAll();
}
public Utilisateur findOne(Long id) {
return userRepository.findOne(id);
}
}
控制器
@RestController
@RequestMapping("/api")
@CrossOrigin(origins="http://localhost:4200",allowedHeaders="*")
public class UserController {
@Autowired
private UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
public UserController() {
super();
// TODO Auto-generated constructor stub
}
@GetMapping("/users")
public List<Utilisateur> getUsers() {
return userService.findAll();
}
@GetMapping("/user/id/{id}")
public ResponseEntity<Utilisateur> getUser(@PathVariable Long id) {
Utilisateur utilisateur = userService.findOne(id);
return ResponseEntity.ok().body(utilisateur);
}
/*
@DeleteMapping("/user/{id}")
public Boolean deleteUser(@PathVariable Long id) {
userRepository.delete(id);
return true;
} */
@PostMapping("/user")
public ResponseEntity<Utilisateur> saveUser(@RequestBody Utilisateur utilisateur) throws URISyntaxException {
Utilisateur result = userService.save(utilisateur);
return ResponseEntity.created(new URI("/api/user/" + result.getId()))
.body(result);
}
@PutMapping("/user")
public ResponseEntity<Utilisateur> updateUser(@RequestBody Utilisateur utilisateur) throws URISyntaxException {
Utilisateur result = userService.save(utilisateur);
return ResponseEntity.ok().body(result);
}
}
发布于 2020-04-03 15:42:35
将映射设置为URL路径变量
@GetMapping("/user/id/{id}")
但是您尝试的URL有一个查询参数:?id=13
尝试使用:http://localhost:8080/api/user/id/13
下面是两种在stackoverflow上的比较
发布于 2020-04-03 15:42:38
URL不正确。您已经将其设置为代码中的路径变量。在这种情况下,与其在postman中访问localhost:8080/api/user/id/?id=13,不如选择localhost:8080/api/user/id/3,
但是如果您遵循REST标准,一个更好的URL应该是这样的(不需要在URL中有"id“)。本地主机:8080/api/user/3
https://stackoverflow.com/questions/61015361
复制相似问题