gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:48:25 26 4
gpt4 key购买 nike

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

我陷入了困境,需要帮助才能进一步前进。请检查下面的代码,我在其中遇到编译错误。

我的业务逻辑如下:

  • AppUserResource 将使用 REST 中的 JSON 数据进行映射
  • Api将调用服务方法来创建用户
  • 服务将创建实体对象并保存在数据库中

我在服务方法中遇到以下错误,如下面的代码所示:

Compilation fails here setRoles(Set< AppUserRoleEntity >) not applicable for the arguments (Set< AppUserRoleResource >)

使用的接口(interface)

   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

    // 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;

}

请检查并分享您的意见以解决此问题。我完全陷入困境,无法继续前进。

最佳答案

AppUserRoleResourceAppUserRoleEntity它们之间不可分配。
所以你不能分配 Set一个带有 Set 的人另一个。
它们具有相同的基类,仅此而已:

public class AppUserRoleResource extends DefaultResource implements AppUserRole {...}

public class AppUserRoleEntity implements AppUserRole {...}

此外,即使 AppUserRoleResource对象可以分配给 AppUserRoleEntity变量,如果不使用有界通配符及其声明的父类(super class)型作为上限,则无法对这些类型的泛型集合执行相同的操作: <? extends AppUserRoleEntity>

为了解决您的问题,您可以编写一个映射器方法来转换 Set<AppUserRoleResource>Set<AppUserRoleEntity> 。你可以这样写:

AppUserEntity obj = new AppUserEntity();
obj.setRoles(mapper.mapToRoleEntities(username.getRoles()));

或者您也可以使用映射器库通过反射(modelmapper、dozer)或生成的代码来映​​射类字段(mapstruct)

关于java - 无法解决 REST API 中的一般错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48048167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com