2015-09-04 2 views
0

В одном из действий, которые у меня есть, я привязал длинный (не примитивный) тип к параметру запроса.Spring MVC RequestParam Long Type Binding Always Null

@RequestMapping("/history") 
    public ModelAndView historyList_GET(
      @RequestParam(value="startDate",required=false) Long startDate, 
      @RequestParam(value="endDate",required=false) Long endDate 
      ) 
    { 
    } 

Но значения этих переменных всегда равны нулю. Поэтому я проверил документы, искал аналогичную проблему, но ничего не нашел.

Конечно, я могу изменить тип привязки на String, а затем преобразовать его в Long, но это не очень хорошее решение, на мой взгляд. Это всего лишь обходной путь ...

Другой способ, которым я видел, что люди, использующие объект-обертку, связывают его с аннотацией @ModelAttribute. Такие как;

public class Wrapper 
{ 
public Long startDate; 
public Long endDate; 
} 

@RequestMapping("/history") 
    public ModelAndView historyList_GET(
      @ModelAttribute Wrapper dates 
      ) 
{ 
} 

, но затем снова это обходное решение.

Я спрашиваю, как это возможно? Почему, несмотря на то, что все другие ссылочные типы прекрасно связывают, Лонг не делает? Это потому, что что-то я пропустил?

Эти запросы по пути ...

/history?endDate=144656539476 
/history?startDate=144656539476 
/history?startDate=144656539476&endDate=14499999999 
+1

Вы должны что-то пропустили, то код при условии, хорошо работает и параметры связаны, как и ожидалось. Вы уверены, что этот конкретный метод выполняется при отправке запроса? Кстати. '@ ModelAttribute' используется для нескольких разных случаев. –

+0

Метод выполняется, когда задан запрос, я уверен в этом. Что касается той части, что я чего-то не хватает, я тоже подумал об этом, но это очень простой метод, он должен быть обязательным ... Я не мог понять, почему. – paroxit

+0

Можете ли вы воспроизвести проблему в каком-то публичном репозитории? –

ответ

0

Ваш класс обертка отсутствует присваиватели.

Фактический код класса-оболочки, который работал для меня: -

public class Wrapper { 
    public Long startDate; 
    public Long endDate; 

    public Long getStartDate() { 
     return startDate; 
    } 

    public void setStartDate(Long startDate) { 
     this.startDate = startDate; 
    } 

    public Long getEndDate() { 
     return endDate; 
    } 

    public void setEndDate(Long endDate) { 
     this.endDate = endDate; 
    } 

} 
Смежные вопросы