Java 无法解决REST API中的一般错误
我正在创建一个RESTWeb服务,其中一个应用程序用户可以使用泛型拥有多个角色 我陷入了困境,需要帮助才能继续前进。请检查下面我得到编译错误的代码 我的业务逻辑如下所示:Java 无法解决REST API中的一般错误,java,rest,generics,Java,Rest,Generics,我正在创建一个RESTWeb服务,其中一个应用程序用户可以使用泛型拥有多个角色 我陷入了困境,需要帮助才能继续前进。请检查下面我得到编译错误的代码 我的业务逻辑如下所示: AppUserResource将使用REST中的JSON数据进行映射 Api将调用服务方法来创建用户 服务将创建实体对象以保存在数据库中 我在服务方法中遇到以下错误,如下代码所示: 此处编译失败setRoles(Set)不是 适用于参数(Set) 使用的界面 public interface AppUserRole
将使用REST中的JSON数据进行映射AppUserResource
- Api将调用服务方法来创建用户
- 服务将创建实体对象以保存在数据库中
public interface AppUserRole {
void setRole(UserRole role);
}
public interface AppUser<T extends AppUserRole> {
void setRoles(Set<T> appUserRoles);
}
public interface AppUserService <T extends AppUser<AppUserRole>>{
T create(T username) throws Exception;
}
// App user resource will get JSON data from REST
public class AppUserResource implements AppUser<AppUserRoleResource> {
//An app user can have mutilple roles
Set<AppUserRoleResource> roles;
public void setRoles(Set<AppUserRoleResource> appUserRoles) {
this.roles = appUserRoles;
}
}
public class AppUserRoleResource extends DefaultResource implements AppUserRole {
private UserRole role;
public UserRole getRole() {
return role;
}
public void setRole(UserRole role) {
this.role = role;
}
}
// Api will call service method to create user
@RestController
@RequestMapping(value = "/rest/users", produces = { APPLICATION_JSON_VALUE })
public class AppUserApi {
private AppUserService service;
@RequestMapping(consumes = { APPLICATION_JSON_VALUE }, method = RequestMethod.POST)
public void create(@RequestBody AppUserResource res) throws Exception {
service.create(res);
}
}
//Service will create entity object to save in data base
public class AppUserServiceImpl implements AppUserService {
public AppUser<AppUserRole> create(AppUserResource username) throws Exception {
AppUserEntity obj = new AppUserEntity();
// Compilation fails here setRoles(Set< AppUserRoleEntity >) not
// applicable for the arguments (Set< AppUserRoleResource >)
obj.setRoles( username.getRoles());
appUserRepository.save(obj);
}
}
public class AppUserEntity implements AppUser<AppUserRoleEntity> {
private Set<AppUserRoleEntity> appUserRoles;
public void setRoles(Set<AppUserRoleEntity> appUserRoles) {
this.appUserRoles = appUserRoles;
}
}
public class AppUserRoleEntity implements AppUserRole {
private UserRole role;
private AppUserEntity appUser;
public void setRole(UserRole role) {
this.role = role;
}
使用的服务
public interface AppUserRole {
void setRole(UserRole role);
}
public interface AppUser<T extends AppUserRole> {
void setRoles(Set<T> appUserRoles);
}
public interface AppUserService <T extends AppUser<AppUserRole>>{
T create(T username) throws Exception;
}
// App user resource will get JSON data from REST
public class AppUserResource implements AppUser<AppUserRoleResource> {
//An app user can have mutilple roles
Set<AppUserRoleResource> roles;
public void setRoles(Set<AppUserRoleResource> appUserRoles) {
this.roles = appUserRoles;
}
}
public class AppUserRoleResource extends DefaultResource implements AppUserRole {
private UserRole role;
public UserRole getRole() {
return role;
}
public void setRole(UserRole role) {
this.role = role;
}
}
// Api will call service method to create user
@RestController
@RequestMapping(value = "/rest/users", produces = { APPLICATION_JSON_VALUE })
public class AppUserApi {
private AppUserService service;
@RequestMapping(consumes = { APPLICATION_JSON_VALUE }, method = RequestMethod.POST)
public void create(@RequestBody AppUserResource res) throws Exception {
service.create(res);
}
}
//Service will create entity object to save in data base
public class AppUserServiceImpl implements AppUserService {
public AppUser<AppUserRole> create(AppUserResource username) throws Exception {
AppUserEntity obj = new AppUserEntity();
// Compilation fails here setRoles(Set< AppUserRoleEntity >) not
// applicable for the arguments (Set< AppUserRoleResource >)
obj.setRoles( username.getRoles());
appUserRepository.save(obj);
}
}
public class AppUserEntity implements AppUser<AppUserRoleEntity> {
private Set<AppUserRoleEntity> appUserRoles;
public void setRoles(Set<AppUserRoleEntity> appUserRoles) {
this.appUserRoles = appUserRoles;
}
}
public class AppUserRoleEntity implements AppUserRole {
private UserRole role;
private AppUserEntity appUser;
public void setRole(UserRole role) {
this.role = role;
}
//服务将创建实体对象以保存在数据库中
公共类AppUserServiceImpl实现AppUserService{
公共AppUser创建(AppUserResource用户名)引发异常{
AppUserEntity obj=新的AppUserEntity();
//此处编译失败setRoles(Set)不是
//适用于参数(Set)
obj.setRoles(username.getRoles());
appUserRepository.save(obj);
}
}
使用的实体
public interface AppUserRole {
void setRole(UserRole role);
}
public interface AppUser<T extends AppUserRole> {
void setRoles(Set<T> appUserRoles);
}
public interface AppUserService <T extends AppUser<AppUserRole>>{
T create(T username) throws Exception;
}
// App user resource will get JSON data from REST
public class AppUserResource implements AppUser<AppUserRoleResource> {
//An app user can have mutilple roles
Set<AppUserRoleResource> roles;
public void setRoles(Set<AppUserRoleResource> appUserRoles) {
this.roles = appUserRoles;
}
}
public class AppUserRoleResource extends DefaultResource implements AppUserRole {
private UserRole role;
public UserRole getRole() {
return role;
}
public void setRole(UserRole role) {
this.role = role;
}
}
// Api will call service method to create user
@RestController
@RequestMapping(value = "/rest/users", produces = { APPLICATION_JSON_VALUE })
public class AppUserApi {
private AppUserService service;
@RequestMapping(consumes = { APPLICATION_JSON_VALUE }, method = RequestMethod.POST)
public void create(@RequestBody AppUserResource res) throws Exception {
service.create(res);
}
}
//Service will create entity object to save in data base
public class AppUserServiceImpl implements AppUserService {
public AppUser<AppUserRole> create(AppUserResource username) throws Exception {
AppUserEntity obj = new AppUserEntity();
// Compilation fails here setRoles(Set< AppUserRoleEntity >) not
// applicable for the arguments (Set< AppUserRoleResource >)
obj.setRoles( username.getRoles());
appUserRepository.save(obj);
}
}
public class AppUserEntity implements AppUser<AppUserRoleEntity> {
private Set<AppUserRoleEntity> appUserRoles;
public void setRoles(Set<AppUserRoleEntity> appUserRoles) {
this.appUserRoles = appUserRoles;
}
}
public class AppUserRoleEntity implements AppUserRole {
private UserRole role;
private AppUserEntity appUser;
public void setRole(UserRole role) {
this.role = role;
}
public class AppUserEntity实现AppUser{
私有设置appUserRoles;
public void setRoles(Set appUserRoles){
this.appUserRoles=appUserRoles;
}
}
公共类AppUserRoleEntity实现AppUserRole{
私有用户角色;
私有appUser实体appUser;
public void setRole(用户角色){
this.role=角色;
}
请检查并共享您的输入以解决此问题。我完全卡住了,无法进一步移动。
AppUserRoleResource
和AppUserRoleEntity
不能在它们之间分配。因此,您不能将一个
集合
分配给另一个集合。
它们具有相同的基类,仅此而已:
public class AppUserRoleResource extends DefaultResource implements AppUserRole {...}
public class AppUserRoleEntity implements AppUserRole {...}
此外,即使可以将AppUserRoleResource
对象分配给AppUserRoleEntity
变量,如果不使用带上限的有界通配符作为超级类型的上限,您也无法对这些类型的泛型集合执行相同的操作,因为它的声明:非常感谢uld请告诉我是否遵循了正确的设计或设计本身存在错误。我将尝试在图片中显示映射器库,以确保您受到欢迎。设计是正确的。您偶然发现此类问题,因为您使用不同的类来表示不同逻辑层的相同内容。这是一种有效的方法,但您让其他人认为不需要使用此抽象。