java - 关于@Controller @RestController 和@ResponseBody 的困惑

标签 java spring rest spring-mvc

因此,我用 @Controller 注释了我的类,而不是我一直使用的 @RestController 。我的乐趣...

@ResponseStatus(HttpStatus.CREATED)
@RequestMapping(value = Paths.SOMEPATH, method = RequestMethod.POST)
public MyObject createMyObject(){
    MyObject myObject = newMyObject();
    myObjectRepository.save(myObject);//autowired repository
    return myObject;
}

Produced 405 Method not allowed(整个方法通过,在返回时)

@ResponseStatus(HttpStatus.CREATED)
@RequestMapping(value = Paths.SOMEPATH, method = RequestMethod.POST)
public @ResponseBody MyObject createMyObject(){
    MyObject myObject = newMyObject();
    myObjectRepository.save(myObject);//autowired repository
    return myObject;
}

效果很好,达到了预期效果

@ResponseStatus(HttpStatus.CREATED)
@RequestMapping(value = Paths.SOMEPATH, method = RequestMethod.POST)
public MyObject createMyObject(){
    MyObject myObject = newMyObject();
    return myObjectRepository.save(myObject);//autowired repository
}

这也有效,这就是为什么我很困惑。谁能解释一下为什么?

(我删除了诸如 @PathVariable 之类的东西以及对 myObject@RequestBody 对象的操作,这些对象用于在 MyObject 中填充数据 为简洁起见的实例)

编辑: 405响应正文

{
    "timestamp": 1446735218918,
    "status": 405,
    "error": "Method Not Allowed",
    "exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
    "message": "Request method 'POST' not supported",
    "path": "/myPath"
}

最佳答案

在 Http 中,错误 4XX 是用户错误。这意味着您没有正确调用您的服务。

"status": 405,
    "error": "Method Not Allowed",

此错误意味着您没有调用正确的 Http 方法,您将方法定义为 POST,可能您正在使用 GET 调用它。

关于java - 关于@Controller @RestController 和@ResponseBody 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33547357/

相关文章:

java - Joda DateTimeFormatter 知道上午还是下午

Java Scheduler 上午 9.30 开始,每 15 分钟运行一次,晚上 8 点结束

java - 反射(reflect) env 变量重新加载到 java bean

java - 代码工作正常,因为 web 服务在 junit 中出现错误

c# - ASP.NET Web API Controller 最佳实践 - Action 定义

java - RestOperation交换拒绝cookie

java - 为什么导入 JFrame 需要继承,而 FlowLayout、JLabel 等不需要继承?

java - 使用 keytool 更改密码时从 Java Keystore 中提取 PKCS12 文件

Spring:@Bean 仍然可以在没有 @Configuration 的情况下工作

javascript - node-restful 不将文档 "contents"保存到 MongoDb