Spring MVC @RequestParams

这是url: https : //192.168.33.10/openmrs/ws/rest/v1/bahmnicore/bahmniencounter/search? includeAll = false & patientUuid = 210d0739-7937-4fb7-8f53-752f393cb4b7 & visitUuid = c1c26908-3f10-11e4-adec- 0800271c1b75

它登陆Spring MVC的控制器方法 –

@RequestMapping(method = RequestMethod.GET, value = "search") @ResponseBody public List search(@RequestParam("patientUuid") String patientUuid, @RequestParam(value = "fromDate", required = false) String date, String visitUuid) throws Exception { if (visitUuid != null) { return bahmniDiagnosisService.getBahmniDiagnosisByPatientAndVisit(patientUuid, visitUuid); } else { return bahmniDiagnosisService.getBahmniDiagnosisByPatientAndDate(patientUuid, date); } } 

如果您看到spring注释,则@Request Params不存在于visitUuid参数中。

即使参数不存在,上面的代码也可以工作。 但最近它抛出了一个exception, visitUuid没有请求参数。 如果我添加@RequestParams("visitUuid")它的解决方案很简单。

但我的问题是,即使我们没有@RequestParamter映射,GET请求中的can参数也会映射到Controller代码上的相应变量。

不,需要适当的映射注释( @RequestParam @PathVariable@PathVariable@PathVariable@RequestBody )。 如果使用调试符号进行编译(这是通常的默认值),则可以省略参数的名称 ,但是您必须告诉Spring在哪里查找该值。

另请注意,Spring具有令人印象深刻的类型转换系统,如果您的服务能够(或可以重构)获取UUID参数而不是String ,则可以使用@RequestParameter UUID patientUuid

您可以使用以下任一选项

 @RequestParams(value = "visitUuid" , defaultValue = "yourDefaultValue") //Or @RequestParams(value = "visitUuid" , required=false)