java - Spring-Hateoas Traverson 如何从三个表中获取信息

标签 java mysql spring

我的数据库中有三个表,例如用户权限角色。 表 authority 包含两个字段 user_idrole_id 是外键。 SQL语句为:

SELECT t1.id id, t3.id user_id, t3.username_x username_x, t2.id role_id, t2.desc_x desc_x
FROM `securitydashboard`.`authorities` AS t1
INNER JOIN `securitydashboard`.`role` AS t2
INNER JOIN `securitydashboard`.`user` AS t3
ON (t2.id = t1.role_id
AND t3.id = t1.user_id);

结果是:

id user_id username_x role_id desc_x
1  1       admin      1       ROLE_ADMIN
2  1       admin      2       ROLE_USER

我正在设置简单的 Spring-Hateoas 项目。通过“sql View ”获取上述信息并在 Traverson 上运行会更容易。 我正在努力通过 Traverson 在没有“sql View ”的情况下获取上述信息。 我的java程序如下:

public class UserResource extends ResourceSupport {

    public String usernameX;
    public String passwordX;
    public String firstnameX;
    public String lastnameX;
    public EmailAddress emailX;
    public Boolean enabledB;
    public String saltX;
    public AuthoritiesesById authority;

    static class AuthoritiesesById {

        public Roles role;

        static class Roles {
            String descX;
        }
    }
}

public class Test2 {
    private static final     ParameterizedTypeReference<PagedResources<Resource<UserResource>>> TYPE_REFERENCE = new ParameterizedTypeReference<PagedResources<Resource<UserResource>>>() {};

    public static void main(String[] args) throws Exception {
        String urlstring = "http://localhost:8085/RestDashboard";
        URL url = new URL(urlstring);
        URLConnection connection = url.openConnection();
        connection.setRequestProperty("Accept", "application/json");
        LinkDiscoverer discoverer = new HalLinkDiscoverer();
        Link link = discoverer.findLinkWithRel("users", connection.getInputStream());

        URI uri = new URI(urlstring);
        Traverson traverson = new Traverson(uri, MediaTypes.HAL_JSON);
        Map<String, Object> parameters = new HashMap<>();
        PagedResources<Resource<UserResource>> resources = traverson.follow(link.getRel()).withTemplateParameters(parameters).toObject(TYPE_REFERENCE);
        for (Resource<UserResource> resource : resources) {
            System.out.print(resource.getContent().authority.role.descX);
        }
    }
}

结果返回null。

我做错了什么?

最佳答案

我不是 100% 确定这是否是问题所在,但您正在从 ResourceSupport 扩展您的 UserResource 并且您正在输入您的 TypeReference使用 Resource 结果实际上是一样的。 至少尝试从 ResourceSupport 扩展或使用 Resource 键入它,但不要同时使用这两个选项。

更新:

尝试使用 org.springframework.hateoas.mvc.TypeReferences.PagedResourcesType 实例化您的类型引用

关于java - Spring-Hateoas Traverson 如何从三个表中获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29082989/

相关文章:

mysql - Node.js连接mysql数据库回调函数未执行

mysql - WordPress(数据库);显示最后修改日期?

java - 如何在 XML 配置中注入(inject) Autowired beans?

java - MongoSocketReadException : Prematurely reached end of stream (Java to Mongo using ssl)

java - 实现生成 HttpSession key

java - 如何在JavaFX中制作多级 TreeView ?

java - 改变一个变量会改变另一个

java - 如何调用以接口(interface)为参数的方法?

MySQL 为什么我无法删除自引用外键上的行

java - 具有 Spring Securing + Hibernate 的 MAVEN Web 应用程序模板