我的数据库中有三个表,例如用户
、权限
和角色
。
表 authority 包含两个字段 user_id
和 role_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/