使用@PathVariable

时间:2017-08-01 14:17:45

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

在get请求中使用多个参数调用请求时出现以下错误:http://localhost:8080/find/1/empid/146220

  

Whitelabel错误页面

     

这个应用程序没有/ error的显式映射,所以你看到了   这是一个后备。

     

Tue Aug 01 19:33:35 IST 2017出现意外错误   (type = Internal Server Error,status = 500)。参数绑定的名称   不能为空或空!在JDK上< 8,你需要使用@Param   命名参数,在JDK 8或更高版本上,请务必使用   α参数;嵌套异常是java.lang.IllegalArgumentException:参数绑定的名称不能为null或为空!在JDK上< 8,你   需要在JDK 8或更高版本上使用@Param作为命名参数,请确保   使用-parameters进行编译。

Demo.java

@Entity
public class Demo {

    @Id
    private Long id;
    private String name;
    private String value;
    //getter -setter
}

DemoApplication.java

@SpringBootApplication
@RestController
public class DemoApplication {

    @Autowired
    private DemoRepository repository;

    @RequestMapping(method=RequestMethod.GET, value="/find/{id}/{name}/{value}")
    public Demo find(@PathVariable Long id, @PathVariable String name, @PathVariable String value){
        return repository.findByIdAndNameAndValue(id, name, value);
    }
}

DemoRepository.java

public interface DemoRepository extends CrudRepository<Demo, Long>{

    @Query("select d from Demo d where d.id = :id and d.name = :name and d.value = :value")
    Demo findByIdAndNameAndValue(Long id, String name, String value);

}   

2 个答案:

答案 0 :(得分:4)

您需要指定PathVariable名称。

示例:

@RequestMapping(method=RequestMethod.GET, value="/find/{id}/{name}/{value}")
public Demo find(@PathVariable(name = "id") Long id, @PathVariable(name = "name") String name, @PathVariable(name = "value") String value){
    return repository.findByIdAndNameAndValue(id, name, value);
}

还有Query方法

示例:

@Query("select d from Demo d where d.id = :id and d.name = :name and d.value = :value")
Demo findByIdAndNameAndValue(@Param("id") Long id, @Param("name") String name, @Param("value") String value);

答案 1 :(得分:0)

您可能应将查询更改为:

 @Query("select d from Demo d where d.id = ?#{[0]} and d.name = ?#{[1]} and d.value = ?#{[2]}")