Java 无法解决REST API中的一般错误

Java 无法解决REST API中的一般错误,java,rest,generics,Java,Rest,Generics,我正在创建一个RESTWeb服务,其中一个应用程序用户可以使用泛型拥有多个角色 我陷入了困境,需要帮助才能继续前进。请检查下面我得到编译错误的代码 我的业务逻辑如下所示: AppUserResource将使用REST中的JSON数据进行映射 Api将调用服务方法来创建用户 服务将创建实体对象以保存在数据库中 我在服务方法中遇到以下错误,如下代码所示: 此处编译失败setRoles(Set)不是 适用于参数(Set) 使用的界面 public interface AppUserRole

我正在创建一个RESTWeb服务,其中一个应用程序用户可以使用泛型拥有多个角色

我陷入了困境,需要帮助才能继续前进。请检查下面我得到编译错误的代码

我的业务逻辑如下所示:

  • AppUserResource
    将使用REST中的JSON数据进行映射
  • Api将调用服务方法来创建用户
  • 服务将创建实体对象以保存在数据库中
我在服务方法中遇到以下错误,如下代码所示:

此处编译失败setRoles(Set)不是 适用于参数(Set

使用的界面

   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请告诉我是否遵循了正确的设计或设计本身存在错误。我将尝试在图片中显示映射器库,以确保您受到欢迎。设计是正确的。您偶然发现此类问题,因为您使用不同的类来表示不同逻辑层的相同内容。这是一种有效的方法,但您让其他人认为不需要使用此抽象。