我有一个带有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,我不知道还有什么可能是错的?
有什么想法吗?
答案 0 :(得分:6)
您应该在方法中添加@ResponseBody
。没有这个,Spring mvc会尝试找到另一个可以发送响应的处理程序方法。
注意:@RestController
会自动为控制器中的每个方法添加@ResponseBody
。