当前位置: 首页 > 知识库问答 >
问题:

如何用@RequestBody调用@RestController?

阎雪峰
2023-03-14

我有一个简单的servlet如下所示:

@RestController
public class TestServlet {
    @RequestMapping(value = "/test1")
    public String test1() {
        return "test1";
    }

    @RequestMapping(value = "/test2")
    public String test2(@RequestBody TestClass req) {
        return "test2";
    }

    public static class TestClass {
        private String value;

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }
    }
}

但是只有不接收参数的servlet在工作:

作品:http://localhost:8080/test1

不起作用:http://localhost:8080/test2?value=1234

http.springframework.http.converter.HttpMessageNotreadableException:缺少必需的请求正文:public java.lang.String

为什么@requestbody注释不起作用?我是不是漏掉了一个重要的片段?

共有1个答案

束涵涤
2023-03-14

@controller@restcontroller之间的区别之一是不必编写@requestbody@responsebody,这意味着控制器方法中没有注释的任何参数(如@pathvariable@modelattribute、...)都将隐式地具有@requestbody,因此必须作为HTTP实体主体发布。因此,您需要将JSON/XML作为POST的一部分发送。您所做的是将数据作为URL的一部分发送,这使得它成为一个请求参数,而不是body-data,您需要@requestparam来从URL中提取数据。

另外,我建议您使用@getmapping/@postmapping或在@requestmapping注释中包含方法参数,您希望服务同时用于POST和GET的可能性很小,因此您应该在控制器方法描述中尽可能具体,以限制错误情况。

 类似资料:
  • 我想为我的一个编写一个简单的测试,并断言输入已正确映射到: 问题:如何向该servlet发送请求正文。然后再检查一下字段是否都设置正确? 这可能与此类似,但我不知道如何检查/监视已解析的DTO? @重复标记:这不是链接问题(关于如何读取响应正文字符串)的重复。我实际上是在要求进行身体测试。

  • 我尝试使用和通过Postman发送JSON和多个文件,但它不起作用。有可能在API中同时使用这两个注释吗?

  • 试图调用服务http://ip:8080/pqrs/lmn/xyz/runtest/scheduledautomation/1/xyz 下面是JSON字符串 必需的字符串参数“cron expresssion”不存在 如何在postman客户机上调用混合的和服务?

  • 我知道如何实现GDT(全局描述符表)以及段寄存器和段描述符的使用。然而,如何/何时访问GDT条目? 它是通过基本的mov指令访问的吗 这是隐式调用ds段寄存器,然后访问GDT段描述符,还是通过其他方式访问GDT条目?

  • 如何编写angular服务方法参数来调用restful webservice Spring MVC,其签名中包含@RequestBody和@RequestParam。 Java代码: 角服务方法: 如果你帮助我,我将不胜感激。祝您愉快!

  • 问题内容: 我一直在努力使AJAX与Jquery一起使用。到目前为止,我最大的问题是我真的不知道如何弄清楚我在哪里犯错。我真的没有调试AJAX调用的好方法。 我正在尝试建立一个管理页面,其中我要执行的功能之一就是更改SQL数据库中设置的权限。我知道.click函数正在被触发,因此我将其范围缩小了,但是我不确定从AJAX调用到SQL查询的链在哪里出了问题。 我的.js代码: 我的.php处理程序: