【问题标题】:POST request in Spring MVC not work after migration from 3.2 to 4.1从 3.2 迁移到 4.1 后 Spring MVC 中的 POST 请求不起作用
【发布时间】:2015-06-19 14:36:48
【问题描述】:

我发送 POST 请求

$.ajax({         
            type: "POST",  
            url: "/common/ajax/advert/",  
            data: data,
            dataType: "json",
            contentType: "application/json",
            success: function(r){}
});

到控制器

@Controller
@RequestMapping(value = "/common/ajax/advert")
public class Controller {

    @RequestMapping(value="/", method=RequestMethod.POST)
    @ResponseBody
    public  Map<String,Object> adsSearch(@RequestBody Map<String,Object> data){

        Map<String,Object> result = new HashMap<String,Object>();
        List<Advert> ads =  advSrv.getAds(data);

        result.put("obj", ads);
        return result;
}

并返回 404 错误,但在 spring 3.2 中这工作正常。

带有 RequestMethod.GET 的控制器在新旧版本中都能正常工作。

请帮我解决它。

UPD.1 我尝试使用 RequestMethod.POST 创建一个 @RestController 类(Spring 4.1) - 但它也没有工作。

UPD.2 在日志中 Spring 正确映射了此方法,但未处理 post 请求(与 get 请求不同,它们工作正常)。

【问题讨论】:

  • 请在这里查看我的答案stackoverflow.com/questions/28675298/…我有同样的问题并用这种方式解决。
  • 不幸的是,它没有帮助。 Post 请求仍然返回 404 错误
  • 当您提供Map&lt;String,Object&gt; 时,Jackson 应该如何知道要映射到哪种对象类型?
  • 在 Spring 3.2 中 Jackson 与 @ResponseBody Map&lt;String,Object&gt; 正常工作
  • @Stephen1832如果你得到 404 这意味着页面未找到,页面重定向或其他问题。您应该调试您的 ResponseBody 之前是可以的,然后添加 messageConvertor 并更新您的杰克逊库。

标签: java spring spring-mvc


【解决方案1】:

最后我发现了一个问题——升级到 4.0 后的 Spring Security,默认启用了 csrf 保护:

DEBUG: org.springframework.security.web.csrf.CsrfFilter - Invalid CSRF token found for post-request

我添加了支持csrf保护,一切正常。

【讨论】:

    猜你喜欢
    • 2018-08-06
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2013-04-09
    • 2021-09-23
    • 2016-11-28
    相关资源
    最近更新 更多