将参数放入函数的正确方法

时间:2018-01-19 11:15:12

标签: java spring

我有一个包含大约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(“”)。

4 个答案:

答案 0 :(得分:2)

我建议有两种选择:

  1. 获取HttpServletRequest个对象并分别获取所需的属性。
  2. 问题是Spring的控制器旨在消除这种低级API(Servlets API)调用。如果控制器太抽象(对抽象数据集进行操作),这可能是合适的,这意味着您将无法使用定义一定数量的参数来定义DTO < / em>的

    1. 使用所需属性构建DTO类并将其作为参数。
    2. 优点是您可以完全将低级别的工作委托给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);
`