首页 > 解决方案 > 如何拆分类以使用多个 @Controller

问题描述

我正在学习弹簧靴,并开发了以下简单示例。我想使用@Controller 将一个类注释为控制器。这个类有构造函数,我想访问 GreetingFromDeuController ,如下所示:

http://localhost:8080:/GreetingFromDeuController?str = "hi"

我收到的错误是

@RequestMapping is not applicable on a constructor

请让我知道如何解决。

代码

@Controller
@RequestMapping("/GreetingFromDeuController")
public class GreetingFromDeuController {

private String str;

@RequestMapping("/GreetingFrom/deu")
GreetingFromDeuController(@RequestParam(value = "str") String str) {
    this.str = str;
}

@RequestMapping("/GreetingFromDeuController")
public String getGreetingFromDeu() {
    return this.str;
}   
}

标签: javaspringspring-bootspring-annotations

解决方案


首先,在您点击 URL 之前,您的构造函数会进行很多初始化。因此,您需要进行设计或告诉我您的业务需求,我会尽力为您提供解决方案。我的重构代码解决方案将帮助您分两步实现这一目标。首先点击 POST 方法,它将对设置变量起作用,然后 GET 方法的后续点击将返回该设置值。

我们可以像下面这样重构代码。它将解释 RequestMapping 在方法和类上的使用。

考虑到我们必须编写两个 API,一个用于读取,一个用于写入。

网址:

1. POST http://localhost:8080/example/greetings (in request body send {str:'hi'})
2. GET  http://localhost:8080/example/greetings

 @Controller
 @RequestMapping("/example")
 public class GreetingFromDeuController {

  private String str;

  @RequestMapping(value="/greetings" , method = RequestMethod.POST)
  public void setGreetingFromDeu(@RequestBody(value = "str") String str) 
  {
    this.str = str;
  }

  @RequestMapping(value="/greetings" , method = RequestMethod.GET)
  public String getGreetingFromDeu() 
  {
   return this.str;
  }   
}

推荐阅读