如何获取Spring @RestController来接受JSON格式而不是www-form-urlencoded的参数?

杰瑞德(Jared)

在JDK 1.8上使用Spring 4.1.7,我有一个@RestController类,看起来像这样:

@RestController
public class ServiceAController {

    public static final Logger LOG = Logger.getLogger(ServiceAController.class);

    @RequestMapping(value="/rest/servicea", method=RequestMethod.POST)
    public ServiceAResponse serviceA(@RequestParam(value="parmA", defaultValue="defaultParmA") String parmA,
            @RequestParam(value="parmB", defaultValue="defaultParmB") String parmB,
            @RequestParam(value="parmC", defaultValue="defaulParmC") String parmC) {
        LOG.info("Inside Service A handler: " + parmA + " B: "+ parmB + " C: "+ parmC);
}

当我从这样的javascript发送POST到/ rest / servicea时,一切正常,并且我在日志中看到了值“ a”,“ b”和“ c”:

    var data = {        
        "parmA": "a",
        "parmB": "b",
        "parmC": "c"
    }

    $.ajax({
        type: "POST",
        url: "./rest/servicea",
        contentType: "application/x-www-form-urlencoded",
        data: data,
        dataType: "json",
        success: submitAuthSuccess,
        error: submitAuthFailure 
    })

但是,当我尝试将调用从javascript更改为此(将协议更改为REST而不是www-urlencode)时,我在日志中得到了默认值(defaultParmA,defaultParmB,defaultParmC):

    var data = {        
        "parmA": "a",
        "parmB": "b",
        "parmC": "c"
    }

    $.ajax({
        type: "POST",
        url: "./rest/servicea",
        contentType: "application/json",
        data: JSON.stringify(data),
        dataType: "json",
        success: submitAuthSuccess,
        error: submitAuthFailure 
    })

我想我在@RestController类中缺少一些东西来让它解析JSON,而不是期望使用www-urlencoded数据。

我尝试更改方法@RequestMapping注释serviceA以添加consumes="application/json"属性,但这没有任何效果。

使用POST正文中的JSON而不是urlencoded数据,我可以做些什么更改以使其起作用?

Sotirios Delimanolis

@RequestParamjavadoc的状态

指示方法参数应绑定到Web请求参数的注释。

可通过各种ServletRequest方法获取请求参数。例如,ServletRequest#getParameterMap()哪个州

请求参数是与请求一起发送的额外信息。对于HTTP Servlet,参数包含在查询字符串或发布的表单数据中。

在第二个片段中,您都不发送任何一个。您正在请求正文中发送JSON。

Spring有一种机制(有很多和自定义的),可以将其反序列化为所需的数据。标准解决方案是@RequestBody,前提是您已经注册HttpMessageConverter了可以处理JSON的适当名称MappingJackson2HttpMessageConverter如果您在类路径上具有Jackson 2,Spring会自动注册,它可以正确地将JSON反序列化为Java POJO类型。

文档提供了许多示例,并说明了如何使用它。使用JSON,您可以使用与您发送的字段相对应的字段定义POJO类型

class RequestPojo {
    private String paramA;
    private String paramB;
    private String paramC;
    // and corresponding getters and setters
}

并将@RequestBody此类型的注释的参数添加到您的处理程序方法中

public ServiceAResponse serviceA(@RequestBody RequestPojo pojo) {
    pojo.getParamB(); // do something
    return ...;
}

Jackson允许您通过注释或通过的配置来定义ObjectMapper如何处理缺少的值。

@RestController在这里不参与。如其javadoc所述,

带有此注释的类型被视为控制器,其中@RequestMapping方法@ResponseBody默认情况下采用语义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Javascript:从x-www-form-urlencoded请求获取参数值

来自分类Dev

Spring MVC中内容类型应用程序/ x-www-form-urlencoded的请求参数的顺序

来自分类Dev

Postmates,如何在application / x-www-form-urlencoded参数内创建列表

来自分类Dev

Python请求模块发送JSON字符串而不是x-www-form-urlencoded参数字符串

来自分类Dev

无法使用带有x-www-form-urlencoded参数的JSOUP登录网站

来自分类Dev

无法使用带有x-www-form-urlencoded参数的JSOUP登录网站

来自分类Dev

PowerShell - Slack API - 房间历史 - 带有 x-www-form-urlencoded 参数的 Post 方法

来自分类Dev

Jsoup发送application / x-www-form-urlencoded而不是json

来自分类Dev

NodeJS 从 formData x-www-form-urlencoded 获取值

来自分类Dev

如何使用Fetch发布x-www-form-urlencoded请求?

来自分类Dev

如何在SoapUI中设置x-www-form-urlencoded?

来自分类Dev

如何在Rails中使用x-www-form-urlencoded

来自分类Dev

为什么 Volley String 请求不能在 x-www-form-urlencoded 中使用 POST 方法发送 Body 参数?

来自分类Dev

如何将 x-www-form-urlencoded post Message 转换为 JSON post Message?

来自分类Dev

如何使用内容类型从 webhook 获取数据:application/x-www-form-urlencoded;charset=UTF-8?

来自分类Dev

改造+ POST方法+ www-form-urlencoded

来自分类Dev

fetch() 标头显示为 application/x-www-form-urlencoded 而不是 application/json

来自分类Dev

Spring MVC-@RequestParam导致带有x-www-form-urlencoded的MissingServletRequestParameterException

来自分类Dev

如何使用Spring Boot Web客户端过帐内容类型为application / x-www-form-urlencoded的Form数据的请求

来自分类常见问题

如何使用x-www-form-urlencoded强制Angular2进行POST

来自分类Dev

如何使用内容类型为x-www-form-urlencoded的okhttp库发布数据?

来自分类Dev

如何使Angular 2将所有请求发送为application / x-www-form-urlencoded

来自分类Dev

如何使用带有角度的ngResource模块发送x-www-form-urlencoded数据?

来自分类Dev

如何在Akka-http 2.4.1中包含application / x-www-form-urlencoded HttpHeader?

来自分类Dev

节点js如何通过发送数据来调用webapi(x-www-form-urlencoded)

来自分类Dev

如何发送带有内容类型x-www-form-urlencoded android改造的发布请求

来自分类Dev

如何使用application / x-www-form-urlencoded创建API签名

来自分类Dev

Akka HTTP 如何使用 Content-Type application/x-www-form-urlencoded POST singleRequest

来自分类Dev

如何在后调用内容类型中将 + 转义为 application/x-www-form-urlencoded

Related 相关文章

  1. 1

    Javascript:从x-www-form-urlencoded请求获取参数值

  2. 2

    Spring MVC中内容类型应用程序/ x-www-form-urlencoded的请求参数的顺序

  3. 3

    Postmates,如何在application / x-www-form-urlencoded参数内创建列表

  4. 4

    Python请求模块发送JSON字符串而不是x-www-form-urlencoded参数字符串

  5. 5

    无法使用带有x-www-form-urlencoded参数的JSOUP登录网站

  6. 6

    无法使用带有x-www-form-urlencoded参数的JSOUP登录网站

  7. 7

    PowerShell - Slack API - 房间历史 - 带有 x-www-form-urlencoded 参数的 Post 方法

  8. 8

    Jsoup发送application / x-www-form-urlencoded而不是json

  9. 9

    NodeJS 从 formData x-www-form-urlencoded 获取值

  10. 10

    如何使用Fetch发布x-www-form-urlencoded请求?

  11. 11

    如何在SoapUI中设置x-www-form-urlencoded?

  12. 12

    如何在Rails中使用x-www-form-urlencoded

  13. 13

    为什么 Volley String 请求不能在 x-www-form-urlencoded 中使用 POST 方法发送 Body 参数?

  14. 14

    如何将 x-www-form-urlencoded post Message 转换为 JSON post Message?

  15. 15

    如何使用内容类型从 webhook 获取数据:application/x-www-form-urlencoded;charset=UTF-8?

  16. 16

    改造+ POST方法+ www-form-urlencoded

  17. 17

    fetch() 标头显示为 application/x-www-form-urlencoded 而不是 application/json

  18. 18

    Spring MVC-@RequestParam导致带有x-www-form-urlencoded的MissingServletRequestParameterException

  19. 19

    如何使用Spring Boot Web客户端过帐内容类型为application / x-www-form-urlencoded的Form数据的请求

  20. 20

    如何使用x-www-form-urlencoded强制Angular2进行POST

  21. 21

    如何使用内容类型为x-www-form-urlencoded的okhttp库发布数据?

  22. 22

    如何使Angular 2将所有请求发送为application / x-www-form-urlencoded

  23. 23

    如何使用带有角度的ngResource模块发送x-www-form-urlencoded数据?

  24. 24

    如何在Akka-http 2.4.1中包含application / x-www-form-urlencoded HttpHeader?

  25. 25

    节点js如何通过发送数据来调用webapi(x-www-form-urlencoded)

  26. 26

    如何发送带有内容类型x-www-form-urlencoded android改造的发布请求

  27. 27

    如何使用application / x-www-form-urlencoded创建API签名

  28. 28

    Akka HTTP 如何使用 Content-Type application/x-www-form-urlencoded POST singleRequest

  29. 29

    如何在后调用内容类型中将 + 转义为 application/x-www-form-urlencoded

热门标签

归档