【问题标题】:No converter found capable of converting from type [spring boot, spring data, JpaRepository]找不到能够从类型转换的转换器 [spring boot, spring data, JpaRepository]
【发布时间】:2020-06-25 20:59:12
【问题描述】:

我有两个实体用户和角色

类用户

package com.domain;
import lombok.Data;
import javax.persistence.*;
import java.util.Set;

@Data
@Entity
@Table(name = "usr")
public class Users {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String fio;

    private String password;

    @Column(nullable = false, unique = true)
    private String username;

    @ManyToMany(fetch = FetchType.EAGER)
    private Set<Role> roles;
}

类角色

package com.domain;

import lombok.Data;

import javax.persistence.*;
import java.util.Set;

@Data
@Entity
@Table(name = "role")
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;

    @Transient
    @ManyToMany(mappedBy = "roles")
    private Set<Users> users;
}

自动创建了三个表,ok

然后我创建了存储库

package com.repository;

import com.domain.Role;
import com.domain.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Set;

@Repository
public interface MyUserRepository extends JpaRepository<Users, Long> {
    Users findByUsername(String Username);
    Set<Role>  findRoleByUsername(String Username);
}

并尝试在我的控制器中使用 findRoleByUsername

我的控制器中的方法

    @GetMapping( "/role")
    public Set<Role> roletestpage() {
        Set<Role> myrole = myUserRepository.findRoleByUsername("admin");
        return myrole;
    }

当我运行我的程序时出现错误

ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [com.domain.Users] to type [com.domain.Role]] with root cause
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [com.domain.Users] to type [com.domain.Role]

我的问题在于 findRoleByUsername 方法。 有人知道,这是什么,我该如何解决这个问题?

【问题讨论】:

  • 您不能为多个实体使用同一个存储库,您需要获取用户而不是角色,然后在存储库和控制器之间引入一个服务层,该服务层将为在存储库中获取的用户角色提供服务。
  • Berk Kurkcuoglu,谢谢)

标签: java spring spring-boot jpa


【解决方案1】:

上述实体的存储库是,

@Repository
public interface MyUserRepository extends JpaRepository<Users, Long> {
    Users findByUsername(String Username);
}     
  
@Repository
public interface RolesRepository extends JpaRepository<Role, Long> {
    Set<Role>  findByUsers_username(String Username); 
}     

使用 findByUsers_username(String Username) 方法,您将获得一组特定用户名的角色。 在Controller使用中,

@GetMapping( "/role")
public Set<Role> roletestpage() {
    Set<Role> myrole = myRoleRepository.findByUsers_username("admin");
    return myrole;
}

【讨论】:

    【解决方案2】:

    用户存储库-

    public interface MyUserRepository extends JpaRepository<Users, Long> {
        Users findByUsername(String Username); }
    

    角色库-

    public interface RoleRepository extends JpaRepository<Role, Long> {
            Set<Role> findByUsers_Username(String username); }
    

    这将转换为role.users.userName

    然后为两个仓库添加服务层

    角色服务

     @Service
        public class RoleService {
            @Autowired
            RoleRepository roleRepository;
            public Set<Role> findRoleByUsername(String username) {
                return findByUsers_Username(String username);
            }
    

    用户服务

    @Service
            public class UserService {
                @Autowired
                UserRepository userRepository;
         // Add functions 
                }
    

    最后,添加控制器。

    @Controller
    public class RoleController {
        @Autowired
        RoleService roleService;
    
    @GetMapping( "/role")
        public Set<Role> roletestpage() {
            Set<Role> myrole = roleService.findRoleByUsername("admin");
            return myrole;
        }
    

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 2017-01-21
      • 2019-03-24
      • 2019-12-28
      • 2014-09-19
      • 2021-11-19
      相关资源
      最近更新 更多