我有一个像这样的控制器:
getchecksum
我有这样的VO:
@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;
}
对于我发送的数据是:
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;
}
}
我的ajax调用是这样的:
busList: ["7211342", "7015067"]
compid: "166001"
routeid: "165000056"
search_date: "2017-11-06"
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
});
org.springframework.web.bind.MissingServletRequestParameterException: Required List parameter 'busList' is not present
肯定有问题,但我找不到解决方案。
我的问题是:
@RequestParam(value="busList", required=true) List<String> busList)
是否可以获得List
变量?@RequestParam
变量?此致
更新
我将List
更改为@RequestParam(value="busList", required=true) List<String> busList)
,现在可以正常使用了。因此,我认为问题在于@RequestParam(value="busList", required=false) List<String> busList)
的发送方式不正确。
答案 0 :(得分:2)
将值列表作为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) {
....
}
https://medium.com/@rasheedamir/spring-mvc-how-to-pass-list-of-values-as-url-parameters-5d57dcac8457
答案 1 :(得分:0)
在传递字符串值时。您可以使用类似busp的数组
http://localhost:8080/selectTimeSpaceBusRunList?busList=1,2,3&search_date=20120101&compid=123&routeid=someId
所以控制器端点就像
@RequestMapping(value = "/selectTimeSpaceBusRunList")
public void selectTimeSpaceBusRunList(@RequestParam("busList") String[] busList, @RequestParam("search_date") String search_date, @RequestParam("compid") String compid, @RequestParam("routeid") String routeid) {
//Business logic here.
}
答案 2 :(得分:0)
您可以这样做。
@PostMapping("/test")
public void test(@RequestParam("busList") List<String> busList) {
System.out.println(busList); //[A1,A2]
}