我正在使用Spring boot开发一个应用程序。我尝试使用所有表示动词,如GET,POST,DELETE,它们都正常工作。通过使用PUT方法,它在弹簧启动时不支持。我是否需要添加任何新配置。
Put方法仅适用于请求没有任何参数。如果我添加任何查询参数或表单数据,它不起作用。请任何专业人士帮助我解决这个问题。
@RequestMapping("/student/info")
@RequestMapping(method = RequestMethod.PUT)
public @ResponseBody String updateStudent(@RequestParam(value = "stdName")String stdName){
LOG.info(stdName);
return "ok";
}
请求方法' PUT'不支持
答案 0 :(得分:10)
此代码可以正常使用。您必须在类级别或函数中指定请求映射 等级。
@RequestMapping(value = "/student/info", method = RequestMethod.PUT)
public @ResponseBody String updateStudent(@RequestBody Student student){
LOG.info(student.toString());
return "ok";
}
答案 1 :(得分:1)
您是否尝试过以下请求映射:
@RequestMapping(value = "/student/info", method = RequestMethod.PUT)
无需为URI分隔值和请求方法。
答案 2 :(得分:0)
你可以在课前添加@RestController注释。
@RestController
@RequestMapping(value = "/v1/range")
public class RangeRestController {
}
答案 3 :(得分:0)
从Spring 4.3开始,您可以使用@PutMapping("url")
:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/PutMapping.html
在这种情况下,它将是:
@PutMapping("/student/info")
public @ResponseBody String updateStudent(@RequestParam(value = "stdName")String stdName){
LOG.info(stdName);
return "ok";
}
答案 4 :(得分:0)
我遇到了与spring boot 1.5相同的问题。*,我通过以下方式解决了这个问题:
@RequestMapping(value = "/nick", method = RequestMethod.PUT)
public Result updateNick(String nick) {
return resultOk();
}
添加此bean
@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory(){
@Override
protected void customizeConnector(Connector connector) {
super.customizeConnector(connector);
connector.setParseBodyMethods("POST,PUT,DELETE");
}
};
}
另见
https://stackoverflow.com/a/25383378/4639921
https://stackoverflow.com/a/47300174/4639921