在成功调用url后,Spring RESTful Web服务返回404

tjh*_*s66 2 rest spring json spring-mvc csrf

我有一个带有Spring Security 4的Spring MVC 4应用程序,并部署在运行于jdk 1.8下的Tomcat 8上.Web服务具有如下定义的控制器:

@RequestMapping(value = "/build", method = RequestMethod.POST, produces = "application/json", headers =
{ "Accept=*/*", "Content-Type=*/*" })
public SubjectEntity build(@RequestBody SubjectImportDTO subjectImportDTO)
{
    Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    User user = null;
    if (principal instanceof User)
    {
        user = ((User) principal);
    }
    SubjectEntity entity = service.build(subjectImportDTO);
    System.out.println("FINISH: build");
    return entity;
}
Run Code Online (Sandbox Code Playgroud)

我得到一个csrf令牌,我有正确的设置.我知道网址被正确调用,因为当我到达那里时,我可以在日志中看到它.后端上的服务正在运行,数据正确输入到数据库中,我正确地获取了写入对象,并且使用Jackson Mapper,对象'SubjectEntity'应该被转换为JSON并发送回请求客户端.这个Web服务已经在Spring Web Test框架下进行了单元测试,效果很好!

因此,我很熟悉HTTP 404错误,当传入错误的参数时没有找到URL,或者你正在尝试在GET时进行POST等等.我们可以得到404错误的原因很多. ..

但是......在这种情况下......我们已经获得了URL,执行了代码,然后它拥有了所需的数据.由于Controller说我们有content-type /并且它产生application/json,我不知道还有什么可能是错的?

有任何想法吗?

Jér*_*e B 6

您应该添加@ResponseBody到您的方法.没有这个,Spring mvc会尝试找到另一个可以发送响应的处理程序方法.

注意:@RestController自动添加@ResponseBody控制器中的每个方法.