Java 2个POST请求处理程序(ResponseBody&“x2B”Normal)

Java 2个POST请求处理程序(ResponseBody&“x2B”Normal),java,spring,rest,spring-mvc,Java,Spring,Rest,Spring Mvc,我喜欢在SpringMVC应用程序中实现REST-API。目前,我有一个方法来处理POST请求,它“返回”呈现的ViewScript @RequestMapping(method=RequestMethod.POST) public String onSubmit(User user, Model model) { return "success"; } 最好为POST请求添加第二个带有@ResponseBody注释的方法,例如发送JSON响应。 此外,旧方法仍然必须存在,才能处理“正

我喜欢在SpringMVC应用程序中实现REST-API。目前,我有一个方法来处理POST请求,它“返回”呈现的ViewScript

@RequestMapping(method=RequestMethod.POST)
public String onSubmit(User user, Model model)
{
    return "success";
}
最好为POST请求添加第二个带有@ResponseBody注释的方法,例如发送JSON响应。 此外,旧方法仍然必须存在,才能处理“正常”请求

但这样的代码不起作用:

@RequestMapping(method=RequestMethod.POST)
public String onSubmit(User user, Model model)
{
    return "success";
}

@RequestMapping(method=RequestMethod.POST)
@ResponseBody
public Object add(User user, Model model)
{
    // [...]
    return myObject;
}

有了这段代码,我从Tomcat得到了一个405(不允许使用方法)错误。如何解决这个问题?

目前,Spring无法区分这两个请求:相同的URL,相同的请求方法

您可以通过mimetype进一步区分:

@RequestMapping(method=RequestMethod.POST, headers="content-type=application/json")
尽管有几个mimetype与JSON相关:
headers
值采用一个数组,但是,您可以根据需要缩小/扩大它


请参阅。

不要使用两个注释。这是一个糟糕的选择。只需再使用一个不带注释的方法。但是,通过检查以下条件,该方法与旧方法不同

只需通过查询参数(request=“JSON\u request”)从UI中再传递一个参数


是否可以定义自己的注释,如@RestRequestMapping,它从@RequestMapping扩展而来,但自动设置预期的头?这样我就不必在每个方法中都指定它们了?或者有比定义两个方法更智能的方法吗?@Markus Annotations不能被子类化,所以不是很简单。现在你能找到一种更合适的方法来满足我的目标吗?当你直接在浏览器中点击一个请求时,这是一种方法后调用。它将产生类似405的错误。要在浏览器中检查服务,请使用以下工具
@RequestMapping(method=RequestMethod.POST)
public String onSubmit(User user, Model model)
{
    if(request="JSON_Request") {
       newMethod(user, model);
    }
    return "success";
}


  private Object newMethod(User user, Model model)
{
    // [...]
    return myObject;
}