Spring MVC HTTP状态405-不支持请求方法“ POST”-骨干请求

我是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请求正在映射到其他路径。

建议您在的请求映射上省略value属性createMessage

@RequestMapping(method = RequestMethod.POST )

以上是 Spring MVC HTTP状态405-不支持请求方法“ POST”-骨干请求 的全部内容, 来源链接: utcz.com/qa/408504.html

回到顶部