我有一个包含大约30个参数的巨大表单,我认为做我通常做的事情并不是一个好主意。 表格将被序列化,并通过ajax post将所有参数传递给spring控制器。
我通常喜欢这样:
@RequestMapping(value = "/save-state", method = RequestMethod.POST)
public @ResponseBody
void deleteEnvironment(@RequestParam("environmentName") String environmentName, @RequestParam("imageTag") String imageTag) {
//code
}
但如果我有30个参数,我将在函数中有一个巨大的参数列表。
避免这种情况的通常和正确方法是什么?
编辑:如果我只传递HttpServlet请求怎么办?请求将包含所有参数,我可以简单地调用request.getParameters(“”)。
答案 0 :(得分:2)
我建议有两种选择:
HttpServletRequest
个对象并分别获取所需的属性。 问题是Spring的控制器旨在消除这种低级API(Servlets API)调用。如果控制器太抽象(对抽象数据集进行操作),这可能是合适的,这意味着您将无法使用定义一定数量的参数来定义DTO < / em>的
优点是您可以完全将低级别的工作委托给Spring,而只关心应用程序逻辑。
答案 1 :(得分:1)
您可以这样做:
@RequestMapping(value = "/save-state", method = RequestMethod.POST)
public void deleteEnvironment(@RequestBody MyData data) {
//code
}
创建一个包含所有表单参数的类,并在您的方法上接收它。
答案 2 :(得分:0)
但是如果我有30个参数,我将会有一个巨大的参数列表 功能
在您的请求中,传递包含这些信息的JSON对象,并在Java中创建其对应项。
RequestMethod.POST
不是为了执行删除而设计的
更像是RequestMethod.DELETE
。
@RequestMapping(value = "/save-state", method = RequestMethod.DELETE)
public @ResponseBody
void deleteEnvironment(MyObject myObject) {
//code
}
答案 3 :(得分:0)
正确的方法是将所有参数序列化为Json,并使用一个参数回调结束api。
在后端端获取json并解析为对象。
例如:
` @RequestMapping(method = POST, path = "/task")
public Task postTasks(@RequestBody String json,
@RequestParam(value = "sessionId", defaultValue = "-1") Long sessionId)
throws IOException, AuthorizationException {
Task task = objectMapper.readValue(json, Task.class);
`