【问题标题】:Spring Controller method being called again with the own method result使用自己的方法结果再次调用 Spring Controller 方法
【发布时间】:2021-03-30 03:45:54
【问题描述】:

这是我的控制器:

@Controller
@RequestMapping("/area")
public class AreaController {

    @RequestMapping("/{id}")
    public String getPage(@PathVariable("id") int id){
        return "asd3333";
    }

}

这就是我访问 http://localhost:8080/area/1 时得到的结果:

  • 无法将“java.lang.String”类型的值转换为所需的“int”类型;嵌套异常是 java.lang.NumberFormatException: For input string: "asd3333"]

我测试了这个随机返回只是为了显示正在发生的事情...... 首先使用请求中的 @PathVariable = 1 调用该方法,然后在此之后再次使用该方法的结果再次调用该方法,在这种情况下,它会尝试传递 @PathVariable = "asd3333".

我不知道发生了什么,请帮忙

【问题讨论】:

  • 也许,您的意思是使用 @RestController 而不是 @Controller
  • 第一步总是将您的记录器设置为org.springframework.web: DEBUG 并发布您浏览器的网络标签。

标签: java spring-mvc request-mapping


【解决方案1】:

听起来确实很奇怪。我先问一个问题

@RequestMapping("/{id}")
public String getPage(@PathVariable("id") int id){
    return "asd3333";
}

是否需要为所有方法类型(Get、Post、Delete...)调用此方法。如果没有尝试使用特定的方法调用进行限制。

 @RequestMapping(value = "/{id}", method = POST)

GOTCHA。

也将它添加到方法中,因为您返回一个简单的字符串

@RequestMapping("/{id}")
@ResponseBody
public String getPage(@PathVariable("id") int id)

此外,如果您不打算将此 API 用作 Web MVC 应用程序,而是用作从 @Controller 到 @RestController 的 rest API 后端切换。

【讨论】:

  • 几年前,@GetMapping 通常比method = GET 更受欢迎。
  • 是的,'@ResponseBody' 解决了它。最初我试图用 thymeleaf 渲染一个页面,所以这就是我使用“@Controller”的原因。而且我忘了放百里香依赖,这就是为什么它不能只使用 ModelAndView 返回并且没有'@ResponseBody'。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 2013-12-31
相关资源
最近更新 更多