Spring MVC @RequestParams

时间:2015-09-02 05:57:34

标签: java spring spring-mvc

这是网址: 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<BahmniDiagnosisRequest> 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);
    }
}

如果您看到@Request参数的弹簧注释visitUuid参数不存在。

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

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

2 个答案:

答案 0 :(得分:0)

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

另请注意,Spring有一个令人印象深刻的类型转换系统,如果您的服务能够(或可以重构)使用UUID参数而不是String,您可以使用{ {1}}。

答案 1 :(得分:0)

您可以使用以下任一选项

@RequestParams(value = "visitUuid" ,  defaultValue = "yourDefaultValue")

//Or

@RequestParams(value = "visitUuid" ,  required=false)