Java springmvc@RequestParams

Java springmvc@RequestParams,java,spring,spring-mvc,Java,Spring,Spring Mvc,这是url: 它被放入SpringMVC的以下控制器方法中- @RequestMapping(method = RequestMethod.GET, value = "search") @ResponseBody public List<BahmniDiagnosisRequest> search(@RequestParam("patientUuid") String patientUuid, @RequestParam(value = "fromDate", required =

这是url:

它被放入SpringMVC的以下控制器方法中-

@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);
    }
}
如果您看到visitUuid参数不存在spring注释@Request Params

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


但我的问题是,即使我们没有@RequestParameter映射,GET请求中的参数能否映射到控制器代码上的适当变量。

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


还请注意,Spring有一个令人印象深刻的类型转换系统,如果您的服务能够或可以重构为采用UUID参数而不是字符串,那么您可以使用@RequestParameter UUID patientUuid。

您可以使用以下任一选项

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

//Or

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

是的,但仅当编译器使用调试信息编译时,否则它将无法工作。通过调试信息,参数名称将被保留,否则它们将被优化,不再匹配。一般来说,最好只添加@RequestParam,即使它仅用于文档目的。@M.Deinum调试符号意味着您可以省略名称,而不是完全省略注释。但实际上,代码在没有Spring注释的情况下运行良好。现在才开始失败。另外,这个东西在没有注释的其他机器上也可以工作。这是另一个控制器示例:@RequestMappingmethod=RequestMethod.GET,value=/active@ResponseBody public-bahmnicationCounterTransaction getActiveActiveEncounterParameters activeEncounterParameters{EncounterTransaction-ActiveEncounce=emrEncounterService.getActiveEncounteractiveEncounterParameters;返回BahmnicationCounterTransactionMapper.MapActiveEncounce,activeEncounterParameters.GetIncludeal;}在这里,它也可以在没有Spring注释的情况下工作。@chrylis依赖于旧的基础结构AnnotationMethodHandlerAdapter在没有注释的情况下工作。新的基础结构RequestMappingHandlerAdapter需要注释。因此,如果他们更改了配置或升级了Spring版本,它可能已经更改。