Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Spring数据Rest中转换请求参数_Spring_Hibernate_Spring Data_Spring Data Jpa_Spring Data Rest - Fatal编程技术网

如何在Spring数据Rest中转换请求参数

如何在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')

我在SpringDataREST中有一个映射类的存储库。映射的类有一个枚举字段:

@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
    }

}