2015-09-02 1 views
0

Это 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-0800271c1b75Spring MVC @RequestParams

Он приземлился в 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 Params нет параметра visitUuid ,

Приведенный выше код использовался для работы, даже если параметр отсутствовал. Но недавно он выбрасывает исключение, нет параметра запроса для visitUuid. Решение просто, если я добавляю @RequestParams("visitUuid"), он работает.

Но мой вопрос: может ли параметр в запросе GET сопоставляться с соответствующими переменными в коде контроллера, даже если у нас нет отображения @RequestParamter.

+1

Да только тогда, когда компилятор компилирует с отладочной информацией, иначе она не будет работать. С информацией об отладке имена параметров сохраняются еще, они оптимизированы и больше не будут соответствовать. Как правило, лучше просто добавить '@ RequestParam', даже если это будет только для целей документации. –

+0

@ M.Deinum Отладочные символы означают, что вы можете опустить это имя, а не полностью опускать аннотацию. – chrylis

+0

Но код действительно был без слов без аннотации Spring. Сейчас он только начинает терпеть неудачу. Также эта вещь работает на других машинах без аннотации. –

ответ

0

Нет, требуется аннотация для сопоставления (@RequestParam, @PathVariable, @ModelAttribute, или @RequestBody). имя параметра может быть опущено, если вы компилируете с помощью отладочных символов (что является обычным дефолтом), но вы должны сказать Spring, где искать значение.

Следует также отметить, что весна имеет впечатляющую систему типа преобразования, и если ваша служба может (или может быть переработана в) принимает параметр UUID вместо String, вы можете использовать @RequestParameter UUID patientUuid.

0

Вы можете использовать ниже либо опций

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

//Or 

@RequestParams(value = "visitUuid" , required=false) 
Смежные вопросы