首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给定的id不能为空!嵌套的异常是java.lang.IllegalArgumentException。

给定的id不能为空!嵌套的异常是java.lang.IllegalArgumentException。
EN

Stack Overflow用户
提问于 2020-04-03 15:35:06
回答 2查看 7.2K关注 0票数 0

我正在用弹簧引导创建一个简单的crud。所有功能都很好,但是findOne(长id)方法有一点小问题。

在“邮递员”中,当我把这个url:放在一起时,我得到了这个例外:

"error":“内部服务器错误”,

"exception":"org.springframework.dao.InvalidDataAccessApiUsageException",

"message":“给定的id不能为空!;嵌套的异常是java.lang.IllegalArgumentException:给定的id不能为空!”,

这是我的代码:

仓库

代码语言:javascript
运行
复制
@SuppressWarnings("unused")
@Repository
public interface UserRepository extends JpaRepository<Utilisateur, Long> {
}

服务

代码语言:javascript
运行
复制
public interface UserService {

    Utilisateur save(Utilisateur utilisateur);
    List<Utilisateur> findAll();
    Utilisateur findOne(Long id);
}

ServiceImpl

代码语言:javascript
运行
复制
@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);
    }
}

控制器

代码语言:javascript
运行
复制
@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);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2020-04-03 15:42:35

将映射设置为URL路径变量

代码语言:javascript
运行
复制
@GetMapping("/user/id/{id}")

但是您尝试的URL有一个查询参数:?id=13

尝试使用:http://localhost:8080/api/user/id/13

下面是两种在stackoverflow上的比较

票数 0
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61015361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档