【问题标题】:DomainClassConverter not working in Spring BootDomainClassConverter 在 Spring Boot 中不起作用
【发布时间】:2020-10-31 08:39:22
【问题描述】:

我有一个非常简单的 Spring Boot MVC 项目,我尝试使用 DomainClassConverter 直接加载实体。但似乎找不到 DomainClassConverter。访问 'localhost:8080/one/2' url 时出现以下错误:

无法将类型“java.lang.String”的值转换为所需类型“com.example.test.data.Customer”:找不到匹配的编辑器或转换策略

但 DomainClassConverter 应该由 Spring Boot 启用并管理转换。

我也尝试通过 @EnableSpringDataWebSupport 注释明确启用它,但它也没有工作。

这是我的控制器代码:

@Controller
public class TestController {

    @Autowired
    private CustomerRepository customerRepository;

    @GetMapping("/all")
    public void all(Model model) {
        Iterable<Customer> customers=customerRepository.findAll();
        model.addAttribute("customers",customers);
    };

    @GetMapping("/one/{customer_id}")
    public void one(@PathVariable("customer_id") Customer customer, Model model) {
        model.addAttribute("customer",customer);
    };
}

客户代码:

@Entity
public class Customer {

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

    @Getter
    @Setter
    private String firstName;

    @Getter
    @Setter
    private String lastName;

    protected Customer() {
    }

    public Customer(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

}

CustomerREpositoy:

public interface CustomerRepository extends PagingAndSortingRepository<Customer, Long> {

    List<Customer> findByLastName(String lastName);

    Customer findById(long id);
}

应用程序:

@SpringBootApplication
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class);
    }
}

最后是 build.graddle:

plugins {
    id 'org.springframework.boot' version '2.3.1.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '14'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
//    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'org.postgresql:postgresql'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
//    testImplementation 'org.springframework.security:spring-security-test'
}

test {
    useJUnitPlatform()
}

有什么想法吗?

【问题讨论】:

标签: java spring spring-boot spring-mvc spring-data


【解决方案1】:

您尝试将customer_id(路径变量)作为客户对象。因此,当您尝试访问 localhost:8080/one/2 时会出现上述错误。

customer_id(路径变量)数据类型更改为相关数据类型(字符串、整数等),如下所示,

@GetMapping("/one/{customer_id}")
public void one(@PathVariable("customer_id") String customerId, Model model) {
    ----
};

【讨论】:

  • 我知道它会这样工作,但我希望 DomainClassConverter 将 customer_id 转换为相应的 Customer 实例。这样可以避免很多麻烦。问题是它不起作用。
猜你喜欢
  • 2012-09-07
  • 2012-09-08
  • 2018-09-24
  • 2019-11-25
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
相关资源
最近更新 更多