json - Spring MVC HTTP 状态 405 - 不支持请求方法 'POST' - 主干请求

标签 json rest spring-mvc backbone.js

我是 Spring MVC 的新手,我正在尝试使用 Spring MVC + Hibernate 从头开始​​构建一个 Web 应用程序,以提供类似 JSON Rest API 的服务,并通过客户端的 Backbone 使用此 API。为此,我已开始学习本教程 (http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/)。

So I have a model Message which will have the following REST API Interface:
GET /api/messages               ( working ok )
GET /api/messages/:id           ( working ok )
DELETE /api/messages/:id        ( working ok )
PUT /api/messages/:id           ( working ok )
POST /api/messages              ( error: (DefaultHandlerExceptionResolver.java:194) - Request method 'POST' not supported)

我预计通过表单执行请求时 PUT 或 DELETE 请求会发生此问题,但不会发生 POST 请求。我什至没有通过表格提出请求。在客户端,请求通过 Backbone 完成,如下所示:
new App.Models.Message({ attributeA : 'a', attributeB : 'b' }).save();

我已经尝试按照其他 Stackoverflow 问题中的建议在 web.xml 添加 httpMethodFilter :
 <filter>
    <filter-name>httpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
 </filter>

 <filter-mapping>
    <filter-name>httpMethodFilter</filter-name>
    <servlet-name>mvc-dispatcher</servlet-name>
 </filter-mapping>  

有没有人遇到过同样的问题?

我把我的 MessagesController 留在这里:
@Controller
@RequestMapping("/api/messages")
public class MessagesController {

    @Autowired  
    private MessageService messageService;

    @RequestMapping(method = RequestMethod.GET)
    public @ResponseBody List<Message> getMessagesInJSON(@RequestParam( value = "type", required = false ) String type) {   
        List<Message> messages = messageService.findAll();          
        return messages; 
    }

    @RequestMapping( value = "/{id}", method = RequestMethod.GET )
    public @ResponseBody Message getMessageInJson(@PathVariable Integer id ) {      
        Message message = messageService.findById(id);
        return message;     
    }

    @RequestMapping( value = "/{id}", method = RequestMethod.DELETE )
    @ResponseStatus( value = HttpStatus.NO_CONTENT )
    public void deleteMessage(@PathVariable Integer id ) throws NotFoundException {     
        messageService.delete(id);      
    }

    @RequestMapping( value = "/{id}", method = RequestMethod.PUT )
    @ResponseStatus( value = HttpStatus.NO_CONTENT )
    public void editMessage( @PathVariable Integer id, @RequestBody Message message ) throws NotFoundException {
        message.setId(id);
        messageService.update(message);
    }

    @RequestMapping( value = "/", method = RequestMethod.POST )
    @ResponseStatus(HttpStatus.CREATED)
    public @ResponseBody Message createMessage( @RequestBody Message message ) {        
        return messageService.create(message);
    }

}

非常感谢!

最佳答案

您已经映射 /api/messagesgetMessagesInJSON只允许 GET 请求的方法。您的 POST 请求正在映射到不同的路径。

我建议在您的请求映射中省略 createMessage 的 value 属性.

@RequestMapping(method = RequestMethod.POST )

关于json - Spring MVC HTTP 状态 405 - 不支持请求方法 'POST' - 主干请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19949373/

相关文章:

java - 如何执行位于 Spring MVC 项目内的脚本(可执行类)?

python - Pandas Dataframe 只返回第一行 JSON 数据

json - 如何使用 JSON_TABLE 从 Oracle JSON 列中获取键值作为结果集

android - 如何使用 Retrofit2 获取带有邮政编码 JSON 正文的地址列表

java - 修改 Enunciate 生成的配置文件以使用 CXF 的最新 jackson 库

java - 使用配置类时将@PreAuthorize 或@Secured 与 Jersey 一起使用

java - 使用spring boot时主 Controller 出现404错误

spring - 使用 Spring oauth2 使用受 OAuth 保护的 REST Web 服务

android - 从文件加载时格式错误的 Json

c# - 在 WCF REST 服务中获取原始请求 url