有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring将@RequestBody绑定到其他数据类型

通常会看到JSON请求体绑定到POJO,如下所示:

@RequestMapping(value="/users", headers="Accept=application/json",method=RequestMethod.POST)
public void create(@RequestBody CustomerInfo customerInfo){
...
}

是否可以将@RequestBody绑定到非POJO但其他数据类型,如基本数据类型和非基本数据类型

例如:

@RequestMapping(value="/users", headers="Accept=application/json",method=RequestMethod.POST)
public void create(@RequestBody Set<Integer> ids){
...
}

共 (2) 个答案

  1. # 1 楼答案

    是的,这是可能的

    根据你的例子

    public void create(@RequestBody Set<Integer> ids){
        ...
    }
    

    它将收到[1,2,3]之类的内容,作为请求主体

    再举一个原始的例子

    public void create(@RequestBody int id) {
        ...
    }
    

    它将收到1之类的内容,作为请求主体

    然而,对于后一个例子,我不会说它是application/json

  2. # 2 楼答案

    根据文件:

    https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody

    可以使用Java对象尝试作为@RequestBody的类型参数。也就是说,我认为不存在对原语的支持

    根据文档,您有以下选项:

    The RequestMappingHandlerAdapter supports the @RequestBody annotation with the following default HttpMessageConverters:

    • ByteArrayHttpMessageConverter converts byte arrays.
    • StringHttpMessageConverter converts strings.
    • FormHttpMessageConverter converts form data to/from a MultiValueMap.
    • SourceHttpMessageConverter converts to/from a javax.xml.transform.Source.