一个查询中有@PathVariable和@RequestParam

时间:2015-09-22 09:32:24

标签: spring rest

我有一个不起作用的请求

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <corners
        android:bottomLeftRadius="5dp"
        android:bottomRightRadius="5dp"
        android:topLeftRadius="5dp"
        android:topRightRadius="5dp" />

    <gradient
        android:angle="-90"
        android:centerColor="#660D1E4A"
        android:endColor="#66011444"
        android:startColor="#66505E7F"
        android:type="linear"
         />

    <stroke
        android:dashGap="0dp"
        android:dashWidth="0dp"
        android:width="1dp"
        android:color="#ffffffff" />

</shape>

有我的端点配置

http://localhost:8070/promo/lock/1?reason=CONSUMED

我得到了例外

  

rg.springframework.web.bind.ServletRequestBindingException:丢失   对于Long

类型的方法参数,URI模板变量'id'

这有什么问题?

1 个答案:

答案 0 :(得分:0)

如果方法参数的名称与路径变量的名称完全匹配,那么可以通过使用没有值的@PathVariable来简化它:  所以这是正确的:

public void unlock(Authentication authentication, @RequestParam(value = "reason") UnlockReason reason, @PathVariable Long id) 

如果您想给它一些其他名称,您需要通过以下方式执行此操作:

public void unlock(Authentication authentication, @RequestParam(value = "reason") UnlockReason reason, @PathVariable("id") Long number)