如何在Springboot Restcontroller中使用PUT方法?

时间:2014-10-29 08:41:43

标签: java spring spring-boot

我正在使用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'不支持

5 个答案:

答案 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