为什么Spring REST不分析" get"," post"具有相同网址的方法

时间:2013-09-04 04:25:34

标签: spring rest spring-mvc

我正在使用春季休息,我有两种方法

@RequestMapping(value="/",method = RequestMethod.POST)
    public @ResponseBody
    Object test1(HttpServletRequest request) {}

@RequestMapping(value="/",method = RequestMethod.GET)
    public @ResponseBody
    Object test2(HttpServletRequest request) {}

但它无法检测到这两种方法。是否有必要在春季为每个http方法使用不同的URL。

2 个答案:

答案 0 :(得分:3)

Spring可以为同一个url支持GET和POST。我做过很多次了。例如(这是POST和PUT,但它有相同的区别):

@Controller
@RequestMapping(value="player")
public class PlayerController {

    @Autowired
    private PlayerService playerService;

    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public Player createNewPlayer(@RequestBody Player player) {
        return playerService.createNewPlayer(player);
    }

    @RequestMapping(method = RequestMethod.PUT)
    @ResponseBody
    public Player updatePlayer(@RequestBody Player player) {
        return playerService.updatePlayer(player);
    }
}

如果您可以发布您收到的错误消息,也许我们可以帮助您找出问题所在。

答案 1 :(得分:0)

我来晚了,但对于仍然想了解这个概念的人来说可能会有用。在下面的代码中,我们将得到错误: java.lang.IllegalStateException:模糊的映射。无法映射'XXX'方法。

@RequestMapping(value="/",method = RequestMethod.POST)
    public @ResponseBody
    Object test1(HttpServletRequest request) {}

@RequestMapping(value="/",method = RequestMethod.GET)
    public @ResponseBody
    Object test2(HttpServletRequest request) {}

发生此错误是因为RequestHandlerMapper仅根据URL模式而不是方法类型委派请求。因此,如果我们具有相同的URL模式,则处理程序映射由于歧义性而无法区分应映射到哪个方法。