Spring Boot 自定义CrudRepository方法的自定义返回类型

pw9qyyiw  于 2023-02-04  发布在  Spring
关注(0)|答案(1)|浏览(202)

我正在尝试编写一个扩展CrudRepository的接口,它将返回一个特定字段的列表。当我使用该方法时,我得到了ConverterNotFoundException。我有两个问题:
1.如果我想要包含特定字段的列表,是否有特定的Sping Boot 查询?
1.我是否正确实现了转换器?我不确定如何调用WebConfig。

// EmployeeRepository.java
@Repository
public interface EmployeeRepository extends CrudRepository<Employee, Long> {
    List<String> findByEmployeeId(String employeeId);   // ConverterNotFoundException. Expecting list of employee's full name
}

// EmployeeToStringConverter.java
@Component
public class EmployeeToStringConverter implements Converter<Employee, String> {
    @Override
    public String convert(Employee source) {
        return source.getFullName();
    }
}

// WebConfig.java
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new EmployeeToStringConverter());
    }
}

// Employee.java
@Entity
@Data
@NoArgsConstructor
@Getter
@Table(name = "employees")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="Id")
    private Long id;
    @Column(name="FullName")
    private String fullName;
    @Column(name="NickName")
    private String nickName;

    public HubKey(String fullName, String nickName) {
        this.fullName = fullName;
        this.nickName = nickName;
    }
}

// Exception when calling EmployeeRepository.findByEmployeeId()
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [com.jon.demo.domain.entity.Employee] to type [java.lang.String]
wbgh16ku

wbgh16ku1#

您在WebMvcConfigurer中注册的转换器用于格式化视图(MVC中的视图)中的数据。
您应该向Spring Data相关的自定义转换bean添加转换器,每个Spring Data子项目都有自己的注册条目。
请阅读Spring Data相关文档。

相关问题