@ResponseBody 返回空对象

2023-12-28

当我使用下面的方法来获取用户对象时,它工作得很好。

@GetMapping("/findOne") 
@ResponseBody
public Optional<AppUser> findOne (Long id) {
    return appUserRepository.findById(id);
}

上面给我的回复是:

{"id":1,"useruuid":"863db606-9af6-48a8-963a-07b9fe0fc4fc","useremail":"[email protected] /cdn-cgi/l/email-protection"}

现在,我尝试使用以下命令基于 UUID(4) 进行搜索:

@GetMapping("/findOneUsingUUID") 
@ResponseBody
public AppUser findOne (String useruuid) {
    return appUserRepository.findByUseruuid(useruuid);
}

这不会返回任何内容。没有错误,没有任何警告。虽然这为我提供了我需要的所有详细信息:

AppUser appUser = appUserRepository.findByUseruuid("863db606-9af6-48a8-963a-07b9fe0fc4fc");
    System.out.println(" >>>      " + appUser.getUseruuid());
    System.out.println(" >>>      " + appUser.getId());
    System.out.println(" >>>      " + appUser.getUseremail());

这就是我的存储库中的内容

@Repository
public interface AppUserRepository extends JpaRepository<AppUser, Long> {
AppUser findByUseruuid(String useruuid);

和实体

@NotEmpty
@Column(name = "useruuid")
@GenericGenerator(name = "uuid", strategy = "uuid4")
private String useruuid;

问题:为什么我的控制器方法@GetMapping("/findOneUsingUUID")没有返回任何东西?任何相关信息/帮助/链接将不胜感激。

更新(针对 sidgate 的评论/问题):我在另一个控制器方法中对此进行了测试。像这样:

@RequestMapping(value = { "tableusers" }, method = RequestMethod.GET)
    public String listUsers(ModelMap model) {
       
        AppUser appUser = appUserRepository.findByUseruuid("863db606-9af6-48a8-963a-07b9fe0fc4fc");
        System.out.println(" >>>      " + appUser.getUseruuid());
        System.out.println(" >>>      " + appUser.getId());
        System.out.println(" >>>      " + appUser.getUseremail());
        
        String tableusers = "tableusers";
        model.addAttribute("tableusers", tableusers);

        List<AppUser> users = appUserService.findAllUsers();
        model.addAttribute("users", users);
        model.addAttribute("metaTitle", "All Users");
        return "user_table_data_table";
        
    }

更新2:

现在我的控制器中有以下内容:

@RequestMapping(value = "/findOnebyId/{uuid}", method = RequestMethod.GET)
    @ResponseBody
    public AppUser findOneByUUID2(@PathVariable final String useruuid) {
        return appUserRepository.findByUseruuid(useruuid);
    }

所以我的 URL 变得类似于这样:

http://localhost:8080/findOnebyId?id=eeadf17f-13f2-4939-bab6-2534fcc1f4d4

但现在我的浏览器控制台出现 404 错误。

更新3:

根据戴尔的建议,我修复了它并签入代码github-repo https://github.com/ajkr195/SpringBootCM。现在一切正常。


我根据你的 GitHub 代码进行了尝试,并且该 API 通过 Postman 完美地为我工作。问题可能出在您调用 API 的方式上。

在评论部分中,您提到您正在将值作为路径变量传递给控制器​​。但你还没有添加@PathVariable控制器方法中的注释。因此控制器方法需要一个查询参数,而不是路径变量。请尝试通过传递 UUID 作为参数来调用 API。

EDIT

查看您的 GitHub 代码,您将 API 调用为url: "/findOnebyId?id="+ id.

@GetMapping("/findOnebyId")
    @ResponseBody
    public AppUser findOneByUUID(String useruuid) {
        return appUserRepository.findByUseruuid(useruuid);
    }

在此控制器方法中,您期望useruuid作为查询参数。但在 datatables.html 文件中,您将查询参数发送为id.

所以你可以删除@PathVariable注解并更正 AJAX 请求中的查询参数名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@ResponseBody 返回空对象 的相关文章

随机推荐