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

时间:2016-02-02 20:54:23

标签: json spring rest 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;
}

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

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

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