2015-09-28 4 views
0

Мне нужно реализовать обработку данных на стороне сервера jquery с использованием пружины на бэкэнд. У меня есть этот запрос пост в х-WWW-форм-urlencoded типа:Весна боба для x-www-form-urlencoded типизированного запроса

draw:1 
columns[0][data]:id 
columns[0][name]: 
columns[0][searchable]:true 
columns[0][orderable]:true 
columns[0][search][value]: 
columns[0][search][regex]:false 
columns[1][data]:name 
columns[1][name]: 
columns[1][searchable]:true 
columns[1][orderable]:true 
columns[1][search][value]: 
columns[1][search][regex]:false 
order[0][column]:0 
order[0][dir]:asc 
start:0 
length:10 
search[value]: 
search[regex]:false 

Мой вопрос в том, какая Java Bean соответствует этому требованию?

ответ

1

Время от времени привязка весеннего pojo может быть немного сложной, в тех случаях, когда у вас нет большого выбора, просто введите значения карты с помощью HttpServletRequest.

мне пришлось работать с datatables слишком и создал AjaxRequest класс:

public class AjaxRequest implements Serializable { 

    public static class Column { 

     private int index; 

     private String data; 

     private String name; 

     private boolean searchable; 

     private boolean orderable; 

     private String searchValue; 

     private boolean searchRegex; 

     public int getIndex() { 
      return index; 
     } 

     public void setIndex(int index) { 
      this.index = index; 
     } 

     public String getData() { 
      return data; 
     } 

     public void setData(String data) { 
      this.data = data; 
     } 

     public String getName() { 
      return name; 
     } 

     public void setName(String name) { 
      this.name = name; 
     } 

     public boolean isSearchable() { 
      return searchable; 
     } 

     public void setSearchable(boolean searchable) { 
      this.searchable = searchable; 
     } 

     public boolean isOrderable() { 
      return orderable; 
     } 

     public void setOrderable(boolean orderable) { 
      this.orderable = orderable; 
     } 

     public String getSearchValue() { 
      return searchValue; 
     } 

     public void setSearchValue(String searchValue) { 
      this.searchValue = searchValue; 
     } 

     public boolean isSearchRegex() { 
      return searchRegex; 
     } 

     public void setSearchRegex(boolean searchRegex) { 
      this.searchRegex = searchRegex; 
     } 
    } 

    public static class Order { 

     private int index; 

     private int column; 

     private OrderDirection dir; 

     public int getIndex() { 
      return index; 
     } 

     public void setIndex(int index) { 
      this.index = index; 
     } 

     public int getColumn() { 
      return column; 
     } 

     public void setColumn(int column) { 
      this.column = column; 
     } 

     public OrderDirection getDir() { 
      return dir; 
     } 

     public void setDir(OrderDirection dir) { 
      this.dir = dir; 
     } 
    } 

    public enum OrderDirection { 
     asc, desc; 
    } 

    private static final long serialVersionUID = 1L; 

    private Integer draw; 

    private Integer start; 

    private Integer length; 

    private String searchValue; 

    private boolean searchRegex; 

    private List<Column> columns = new LinkedList<>(); 

    private List<Order> orders = new LinkedList<>(); 

    public AjaxRequest() { 

    } 

    public Integer getDraw() { 
     return draw; 
    } 

    public void setDraw(Integer draw) { 
     this.draw = draw; 
    } 

    public Integer getStart() { 
     return start; 
    } 

    public void setStart(Integer start) { 
     this.start = start; 
    } 

    public Integer getLength() { 
     return length; 
    } 

    public void setLength(Integer length) { 
     this.length = length; 
    } 

    public String getSearchValue() { 
     return searchValue; 
    } 

    public void setSearchValue(String searchValue) { 
     this.searchValue = searchValue; 
    } 

    public boolean isSearchRegex() { 
     return searchRegex; 
    } 

    public void setSearchRegex(boolean searchRegex) { 
     this.searchRegex = searchRegex; 
    } 

    public List<Column> _getColumns() { 
     return columns; 
    } 

    public List<Order> _getOrders() { 
     return orders; 
    } 

    public void bind(HttpServletRequest request) { 
     String searchRegexParam = request.getParameter("search[regex]"); 

     this.searchValue = request.getParameter("search[value]"); 

     if (StringUtils.isNotBlank(searchRegexParam)) { 
      this.searchRegex = searchRegexParam.equals("true"); 
     } 

     for (int i = 0;; i++) { 
      String cDataParam = request.getParameter("columns[" + i + "][data]"); 
      String cNameParam = request.getParameter("columns[" + i + "][name]"); 
      String cSearchableParam = request.getParameter("columns[" + i + "][searchable]"); 
      String cOrderableParam = request.getParameter("columns[" + i + "][orderable]"); 
      String cSearchValueParam = request.getParameter("columns[" + i + "][search][value]"); 
      String cSearchRegexParam = request.getParameter("columns[" + i + "][search][regex]"); 

      // No more columns 
      if (cDataParam == null) { 
       break; 
      } 

      Column column = new Column(); 
      column.setIndex(i); 
      column.setData(cDataParam); 
      column.setName(cNameParam); 
      column.setSearchable(StringUtils.equals(cSearchableParam, "true")); 
      column.setOrderable(StringUtils.equals(cOrderableParam, "true")); 
      column.setSearchValue(cSearchValueParam); 
      column.setSearchRegex(StringUtils.equals(cSearchRegexParam, "true")); 

      this.columns.add(column); 
     } 

     for (int i = 0;; ++i) { 
      String orderColumnIdx = request.getParameter("order[" + i + "][column]"); 

      if (StringUtils.isEmpty(orderColumnIdx)) { 
       break; 
      } 

      String orderDirection = request.getParameter("order[" + i + "][dir]"); 

      if (StringUtils.isEmpty(orderDirection)) { 
       break; 
      } 

      Order order = new Order(); 
      order.setIndex(i); 
      order.setColumn(Integer.valueOf(orderColumnIdx)); 
      order.setDir(OrderDirection.valueOf(orderDirection)); 

      this.orders.add(order); 
     } 
    } 
} 

Трудные вещи карта columns и orders поэтому я создал внутренние классы для работы с ними. Для того, чтобы использовать его просто сделать:

@RequestMapping(produces = "application/json") 
@ResponseBody 
public AjaxResponse ajax(HttpServletRequest request, AjaxRequest ajaxRequest) { 
    ajaxRequest.bind(request); 
    // ... 
} 

Все атрибуты, которые не могут быть отображены весной будут обработаны методом bind.

Здесь Си AjaxResponse Я использую:

@JsonInclude(value = Include.NON_EMPTY) 
public class AjaxResponse implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private long draw; 

    private long recordsTotal; 

    private long recordsFiltered; 

    private List<Object> data = new ArrayList<>(); 

    private String error; 

    public AjaxResponse() { 

    } 

    public AjaxResponse(int draw) { 
     this.draw = draw; 
    } 

    public long getDraw() { 
     return draw; 
    } 

    public void setDraw(long draw) { 
     this.draw = draw; 
    } 

    public long getRecordsTotal() { 
     return recordsTotal; 
    } 

    public void setRecordsTotal(long recordsTotal) { 
     this.recordsTotal = recordsTotal; 
    } 

    public long getRecordsFiltered() { 
     return recordsFiltered; 
    } 

    public void setRecordsFiltered(long recordsFiltered) { 
     this.recordsFiltered = recordsFiltered; 
    } 

    public List<Object> getData() { 
     return data; 
    } 

    public void setData(List<Object> data) { 
     this.data = data; 
    } 

    public String getError() { 
     return error; 
    } 

    public void setError(String error) { 
     this.error = error; 
    } 
} 

Для тех, кто интересно, я должен был написать этот код, чтобы эффективно работать с https://www.datatables.net

+0

Великой, спасибо. Это спаситель жизни, и он работал. – cuneytyvz

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