Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 成功调用url后,SpringRESTfulWeb服务返回404_Json_Spring_Rest_Spring Mvc_Csrf - Fatal编程技术网

Json 成功调用url后,SpringRESTfulWeb服务返回404

Json 成功调用url后,SpringRESTfulWeb服务返回404,json,spring,rest,spring-mvc,csrf,Json,Spring,Rest,Spring Mvc,Csrf,我有一个带有SpringSecurity4的SpringMVC4应用程序,部署在JDK1.8下运行的Tomcat8上。web服务将控制器定义为: @RequestMapping(value = "/build", method = RequestMethod.POST, produces = "application/json", headers = { "Accept=*/*", "Content-Type=*/*" }) public SubjectEntity build(@Request

我有一个带有SpringSecurity4的SpringMVC4应用程序,部署在JDK1.8下运行的Tomcat8上。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令牌,我的设置正确。我知道url被正确调用,因为当我到达那里时,我可以在日志中看到这一点。后端上的服务正在运行,数据已正确输入数据库,我正确获取了write对象,并使用Jackson映射器将对象“SubjectEntity”转换为JSON并发送回请求客户端。这个web服务已经在SpringWeb测试框架下进行了单元测试,效果非常好

所以,我很熟悉HTTP 404错误,当传入错误的参数时,找不到URL,或者当它是GET时,你试图做一篇文章,等等。为什么我们可以得到404错误的原因有很多

但是。。。在这种情况下。。。我们已经找到了URL,执行了代码,然后它就有了所需的数据。因为控制器说我们有content-type/并且它生成application/json,所以我不知道还有什么可能是错误的


有什么想法吗?

您应该在方法中添加
@ResponseBody
。如果没有这一点,SpringMVC试图找到另一个可以发送响应的处理程序方法


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

您的控制器是否用
@controller
而不是
@RestController
注释?我使用的是@controller…啊。。。我使用了'@Controller',但我忽略了在这个端点添加'@ResponseBody'。就这样。下一次,我将看一看“@RestController”甚至不熟悉这个。谢谢