如何在Spring数据Rest中转换请求参数
我在SpringDataREST中有一个映射类的存储库。映射的类有一个枚举字段:如何在Spring数据Rest中转换请求参数,spring,hibernate,spring-data,spring-data-jpa,spring-data-rest,Spring,Hibernate,Spring Data,Spring Data Jpa,Spring Data Rest,我在SpringDataREST中有一个映射类的存储库。映射的类有一个枚举字段: @Entity class Run { @Id @GeneratedValue Integer id Status status public static enum Status { IN_PROCESS('inProcess'), FAILED('failed'), SUCCESS('success')
@Entity
class Run {
@Id
@GeneratedValue
Integer id
Status status
public static enum Status {
IN_PROCESS('inProcess'),
FAILED('failed'),
SUCCESS('success')
String value
Status(String value) {
this.value = value
}
@JsonValue
@Override
public String toString() {
return value
}
}
}
我已为运行实体声明了以下存储库:
interface RunRepository extends CrudRepository<Run, Integer> {
public Iterable<Run> findByStatus(@Param('status') Run.Status status)
}
但是,当我在RunRepository
类上调用findByStatus
方法(通过HTTP)时,转换器没有被调用,而是得到一个org.springframework.core.convert.ConversionFailedException
,其根本原因如下:java.lang.IllegalArgumentException:No enum常量Run.Status.inProcess
向存储库传递参数时,似乎没有调用自定义转换器
当通过HTTP调用公开的存储库方法时,如何让存储库接收正确转换的请求参数?是否需要将
@Param('status')
作为进程中的接收,而不是作为进程中的接收。camel大小写字符串是这些字符串在系统中的一般表示形式。此外,还有许多其他情况与完全相同的问题。我之所以选择这个,是因为它很容易演示。
class RunStatusConverter implements Converter<String, Run.Status> {
@Override
Run.Status convert(String s) {
return Run.Status.IN_PROCESS
}
}
@Controller
class TestController {
@RequestMapping(path = '/test-status')
public @ResponseBody String testStatus(@RequestParam Run.Status status) {
println 'status: ' + status
return status.value
}
}