Java 在函数中放置参数的正确方法

Java 在函数中放置参数的正确方法,java,spring,Java,Spring,我有一个巨大的表单,有大约30个参数,我认为做我通常做的事情不是一个好主意。 表单将被序列化,并通过ajax post将所有参数传递给spring控制器 我通常这样做: @RequestMapping(value = "/save-state", method = RequestMethod.POST) public @ResponseBody void deleteEnvironment(@RequestParam("environmentName") String environmentN

我有一个巨大的表单,有大约30个参数,我认为做我通常做的事情不是一个好主意。 表单将被序列化,并通过ajax post将所有参数传递给spring控制器

我通常这样做:

 @RequestMapping(value = "/save-state", method = RequestMethod.POST)
public @ResponseBody
void deleteEnvironment(@RequestParam("environmentName") String environmentName, @RequestParam("imageTag") String imageTag) {
    //code
}
@RequestMapping(value = "/save-state", method = RequestMethod.POST)
public void deleteEnvironment(@RequestBody MyData data) {
    //code
}
但是如果我有30个参数,我会在函数中有一个巨大的参数列表

避免这种情况的通常正确方法是什么

编辑:如果我只传递HttpServlet请求怎么办??请求将包含所有参数,我可以简单地调用request.getParameters(“”)。

但是如果我有30个参数,我会在 功能

在您的请求中,传递一个包含这些信息的JSON对象,并用Java创建对应对象。

RequestMethod.POST
不是为执行删除而设计的。
Usr而不是
请求方法。删除

@RequestMapping(value = "/save-state", method = RequestMethod.DELETE)
public @ResponseBody
void deleteEnvironment(MyObject myObject) {
    //code
}

正确的方法是将所有参数序列化为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);
`

您可以这样做:

 @RequestMapping(value = "/save-state", method = RequestMethod.POST)
public @ResponseBody
void deleteEnvironment(@RequestParam("environmentName") String environmentName, @RequestParam("imageTag") String imageTag) {
    //code
}
@RequestMapping(value = "/save-state", method = RequestMethod.POST)
public void deleteEnvironment(@RequestBody MyData data) {
    //code
}

创建一个包含所有表单参数的类,并在方法上接收这些参数。

我建议有两个选项:

  • 获取一个
    HttpServletRequest
    对象并分别获取所需的属性。
  • 问题在于Spring的控制器设计用于消除此类低级API(Servlets API)调用。如果控制器过于抽象(在抽象数据集上操作),这可能是合适的,这意味着您将无法使用固定长度的参数数定义DTO

  • 使用所需的属性构造DTO类,并将其作为参数。

  • 优点是您完全将低级工作委托给Spring,只关心您的应用程序逻辑。

    创建一个包含所有必需参数的bean类,并在controller方法中使用它。您能举一个简单的例子吗?我不习惯这样做。如果我只传递HttpServlet请求呢??请求将包含所有参数,我可以简单地调用request.getParameters(“”)。我可以正常地在ajax文章中传递序列化数据吗?我以前使用HttpServletRequest做过,它比DTO对象更简单,代码更少。我想我会使用它。请注意,使用DTO可以更容易地使用验证。这并不重要,因为我有一个删除东西的功能