我有一个像这样的控制器:
@RequestMapping(value="/selectTimeSpaceBusRunList.do") public ModelAndView selectTimeSpaceBusRunList(Model model,HttpServletRequest request,@RequestParam("search_date") String search_date,@RequestParam(value="compid",required=false,defaultValue="") String compid,@RequestParam(value="routeid",required=true) String routeid,@RequestParam(value="busList",required=true) List<String> busList) { ModelAndView mv = new ModelAndView(); Map<String,List<TbDmhTmspaceChartVO>> resultMap = new HashMap<String,List<TbDmhTmspaceChartVO>>(); try { TbDmhTmspaceChartVO vo = new TbDmhTmspaceChartVO(); search_date = search_date.replaceAll("-",""); vo.setSearch_start_date(search_date + "000000"); vo.setSearch_end_date(search_date + "235959"); vo.setCompid(compid); vo.setRouteid(routeid); vo.setBusList(busList); List<TbDmhTmspaceChartVO> resultList = runService.selectTimeSpaceBusRunList(vo); resultMap.put("resultList",resultList); } catch (Exception e) { logger.error("##selectTimeSpaceBusRunList exception " + e.toString()); } mv.addAllObjects(resultMap); mv.setViewName("jsonView"); return mv; }
@H_301_8@我有这样的VO:
public class TbDmhTmspaceChartVO { private String run_enddt; // date yes 1 private String busid; // number(9,0) yes 2 private String run_startdt; // date yes 3 private String routeid; // number(9,0) yes 4 private String compid; // number(6,0) yes 5 private String carregno; // varchar2(12 byte) yes 6 private String runord; // number(4,0) yes 7 private String start_pathseq; // number(5,0) yes 8 private String end_pathseq; // number(5,0) yes 9 private String total_bstopcnt; // number(10,0) yes 10 private String seq_list; // varchar2(4000 byte) yes 11 private String node_list; // varchar2(4000 byte) yes 12 private String hms_list; // varchar2(4000 byte) yes 13 private String coll_list; // varchar2(4000 byte) yes 14 private String cross_pass_cnt; // number(10,0) yes 15 private String seq_list_1; // varchar2(4000 byte) yes 16 private String node_list_1; // varchar2(4000 byte) yes 17 private String hms_list_1; // varchar2(4000 byte) yes 18 private String coll_list_1; // varchar2(4000 byte) yes 19 private String bstop_dep_cnt; // number(10,0) yes 20 private String seq_list_3; // varchar2(4000 byte) yes 21 private String node_list_3; // varchar2(4000 byte) yes 22 private String hms_list_3; // varchar2(4000 byte) yes 23 private String coll_list_3; // varchar2(4000 byte) yes 24 private String search_start_date; private String search_end_date; private List<String> busList; // getters and setters... public List<String> getBusList() { return busList; } public void setBusList(List<String> busList) { this.busList = busList; } }
@H_301_8@对于我发送的数据是:
busList: ["7211342","7015067"] compid: "166001" routeid: "165000056" search_date: "2017-11-06"
@H_301_8@我的ajax电话是这样的:
$.ajax({ type: "POST",url: "./run/selectTimeSpaceBusRunList.do",data: { search_date : input_date,compid : $("#busCompany").val(),routeid : $("#busRoute").val(),busList : selected_bus_list },dataType : "json",beforeSend: null,success: success,error: null });
@H_301_8@org.springframework.web.bind.MissingServletRequestParameterException: required List parameter 'busList' is not present
@H_301_8@因此@RequestParam(value =“ busList”,required = true)List< String> busList),但找不到该解决方案.
我的问题是:
>是否无法通过@RequestParam获取List变量?
>如果不可能,还有其他方法可以获取List变量吗?
>是否可以一次获取DTO变量?问候,
更新
我更改了@RequestParam(value =“ busList”,required = true)List< String>将list< String>转换为@RequestParam(value =“ busList”,required = false). busList),现在工作正常.所以我认为问题出在busList的发送方式不正确.
最佳答案
最常见的将值列表作为URL参数传递的标准方法是重复它们,即
http://rentacar.com/api/v1/search?make=audi&model=A8&type=6&type=11&type=12&color=RED&color=GREY
现在的问题是在Spring MVC REST端点中处理此类输入?假设您正在开发一个搜索API,以查找可出租的汽车;这是您将如何做的:
public List<Vehicle> search(@RequestParam(value="make",required=false) String make,@RequestParam(value="model",required=false) String model,@RequestParam(value="type",required=false) List<String> types,@RequestParam(value="color",required=false) List<String> colors) { .... }
@H_301_8@https://medium.com/@rasheedamir/spring-mvc-how-to-pass-list-of-values-as-url-parameters-5d57dcac8457