Java 如何在RESTWebService中实现动态URL

Java 如何在RESTWebService中实现动态URL,java,spring,rest,web-services,spring-mvc,Java,Spring,Rest,Web Services,Spring Mvc,我正在尝试为我的应用程序开发新的web服务。 为此,我使用了SpringRESTWebService 在控制器端,我尝试根据传递的代理获取记录列表。现在,根据要求,代理可以传递,也可以为null。如果代理为null,则应选择所有记录。否则,仅获取那些记录 根据其中一个搜索结果,尝试使用下面的代码来实现动态性,但不起作用 @RequestMapping(value = "/staging/{agentCode: [^/]*?}" , method = RequestMethod.GET) 以下

我正在尝试为我的应用程序开发新的web服务。
为此,我使用了
SpringRESTWebService

在控制器端,我尝试根据传递的代理获取记录列表。现在,根据要求,代理可以传递,也可以为null。如果代理为null,则应选择所有记录。否则,仅获取那些记录

根据其中一个搜索结果,尝试使用下面的代码来实现动态性,但不起作用

@RequestMapping(value = "/staging/{agentCode: [^/]*?}" , method = 
RequestMethod.GET)
以下是我现有的代码:

@Controller
@RequestMapping(value="/batches")   
public class BatchController {

    @SuppressWarnings({ "rawtypes" })
    @RequestMapping(value="/staging/{agentCode}", method = 
 RequestMethod.GET)         
    @ResponseBody
    public ResponseEntity IntmBatch(@PathVariable("agentCode") String 
   agentCode)       
   {
    //code here 
   }
案例1:当我使用类似URL的

        www.example.com/myapplication/batches/staging/1234
它工作良好,并取得了预期的结果

情况2:但是如果我没有传递任何参数

    www.example.com/myapplication/batches/staging/
在中,我没有传递任何参数,它表示找不到映射

请告诉我如何在
REST
GET-Request方法调用中实现此动态URL


提前谢谢

在控制器中使用@RequestMapping(value=“/staging”,method=RequestMethod.GET)再创建一个方法,如下所示

@RequestMapping(value = "/staging", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity returnAll() {
    System.out.println("returning  all ");
    // code here
return null;

}

在控制器中使用@RequestMapping(value=“/staging”,method=RequestMethod.GET)再创建一个方法,如下所示

@RequestMapping(value = "/staging", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity returnAll() {
    System.out.println("returning  all ");
    // code here
return null;

}

您可以对URL中的可选值使用
@RequestParam
,而不是使用
@Pathvariable


因此您的URL将类似于


案例1
www.example.com/myapplication/batches/staging?agentCode=1234
&
案例2
www.example.com/myapplication/batches/staging

希望它能解决你的问题

 @SuppressWarnings({ "rawtypes" })
 @RequestMapping(value="/staging", method = RequestMethod.GET)         
 @ResponseBody
 public ResponseEntity IntmBatch(@RequestParam(name="agentCode",required=false) String   agentCode)       
   {
    //code here 
   }

您可以对URL中的可选值使用
@RequestParam
,而不是使用
@Pathvariable


因此您的URL将类似于


案例1
www.example.com/myapplication/batches/staging?agentCode=1234
&
案例2
www.example.com/myapplication/batches/staging

希望它能解决你的问题

 @SuppressWarnings({ "rawtypes" })
 @RequestMapping(value="/staging", method = RequestMethod.GET)         
 @ResponseBody
 public ResponseEntity IntmBatch(@RequestParam(name="agentCode",required=false) String   agentCode)       
   {
    //code here 
   }

@RequestMapping(value=“/staging/{agentCode}”,method=RequestMethod.GET)这意味着您希望请求中的agentCode是必需的。通过这种方式,您无法实现您的期望。我认为您可以将“/staging”和“/staging/{agentCode}”作为两种不同的服务。这太荒谬了。您有两个控制器方法:
@RequestMapping(value=“/staging”
@RequestMapping(value=“/staging/{id}”
。这就是您在每个应用程序中看到的方法。相反,您需要一个方法,但必须实现逻辑来决定该方法中需要什么。具体的意义是什么?@RequestMapping(value=“/staging/{agentCode}”,method=RequestMethod.GET)这意味着您希望请求中的agentCode是必需的。这样您就无法实现您的期望。我认为您可以将“/staging”和“/staging/{agentCode}”作为两种不同的服务。这是荒谬的。您有两种控制器方法:
@RequestMapping(value=“/staging”
@RequestMapping(value=“/staging/{id}”
。这就是你在每个应用程序中看到的方法。相反,你想要一个方法,但必须实现逻辑来决定该方法中需要什么。重点是什么?是的。我可以像上面提到的方法那样做。但是我想知道像regex之类的东西是否可以解决我的解决方案。这是将仅为调用原因而避免一个方法。是的。我可以像上面提到的方法那样执行此操作。但是我想知道类似regex之类的方法是否可以解决我的解决方案。这将仅为调用原因而避免一个方法。