聊聊@RequestBody和Json之间的关系

在使用springmvc的时候,后台@RequestBody接受的是一个json格式的字符串,一定是一个字符串。

我们可以通过@RequestBody Map

    @RequestMapping(value="/queryAccountList.do",produces="application/json;charset=UTF-8")    @ResponseBody    public HashMap<String, Object> queryAccountList(@RequestBody Map<String, Object> paramsMap){        System.out.println("paramsMap="+paramsMap);        String  channel= (String) paramsMap.get("channel");        String function_code=(String) paramsMap.get("function_code");        Map<String, Object> reqParam=(Map<String, Object>)paramsMap.get("data");

当前端调用我们的接口时,传入json字符串,就转为了map对象。这里主要是@RequestBody的底层实现,我们不讨论。

json对象和json字符串的区别:

var person={“name”:”zhangsan”,”sex”:”男”,”age”:”24”}//json对象var person='{“name”:”zhangsan”,”sex”:”男”,”age”:”24”}';//json字符串

json对象转为json字符串,调用stringify方法:

var person={"name":"zhangsan","sex":"男","age":"24"};//json对象var personString = JSON.stringify(person);alert(personString);

SpringMVC接受json字符串类型

在SpringMVC中基于REST开发时,前端传入后台的应该是一个json格式的字符串,而不是一个json对象

GET、POST方式提时, 根据request header Content-Type的值来判断:

application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);

multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);

其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理)。

@RequestBody 处理类型 和 对象 和 json相互转换1 @RequestBody 处理类型

在项目中经常看到controller 中有 @RequestBody 字样,他到底有什么作用?

一般使用表单提交数据时不需要使用@RequestBody 即可自动封装数据到对应的 Bean 中。@RequestBody 用来处理Content-Type: application/json, application/xml等

它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

说明:使用 @RequestBody 解析数据需要添加 jackson 或 fastjson 依赖包。

maven 引入 fastjson 包

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency>    <groupId>com.alibaba</groupId>    <artifactId>fastjson</artifactId>    <version>1.2.51</version></dependency>

2 对象 和 json 相互转换

在项目中经常会遇到对象和 json 之间相互转换,公共类 和 json 对象转换, 静态内部类 和 json 对象转换

2.1 没有内部类时 Student 类

@Datapublic class Student {    private String id;    private String name;    private int age;    private String sex;@Override    public String toString() {        return ToStringBuilder.reflectionToString(this);    }}

json 和 对象 相互转换

public static void main(String[] args) throws IOException {        ObjectMapper mapper = new ObjectMapper();        Student student = new Student();        student.setName("good");        String s = mapper.writeValueAsString(student);        System.out.println(s);        Student hd2 = mapper.readValue(s, Student.class);        System.out.println(hd2);    }

2.2 有静态内部类时 Student 类

@Datapublic class Student {    private String id;    private String name;    private int age;    private String sex;    private HomeData homeData;    private BigDecimal salary;    private String[] tel;    @Override    public String toString() {        return ToStringBuilder.reflectionToString(this);    }    @Data    public static class HomeData{        private Address address;        @Override        public String toString() {            return ToStringBuilder.reflectionToString(this);        }        @Data        public static class Address {            private String country;            private String city;            @Override            public String toString() {                return ToStringBuilder.reflectionToString(this);            }        }    }}

json 和 对象 之间相互转换

public static void main(String[] args) throws IOException {        ObjectMapper mapper = new ObjectMapper();        Student student = new Student();        Student.HomeData homeData = new Student.HomeData();        Student.HomeData.Address address = new Student.HomeData.Address();        address.setCountry("中国");        address.setCity("上海");        homeData.setAddress(address);        student.setHomeData(homeData);        String s = mapper.writeValueAsString(address);        System.out.println(s);        Student.HomeData.Address hd2 = mapper.readValue(s, Student.HomeData.Address.class);        System.out.println(hd2);    }

说明:主要方法有 mapper.writeValueAsString 和 mapper.readValue

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

画龙画虎难画骨,知人知面不知心。

聊聊@RequestBody和Json之间的关系

相关文章:

你感兴趣的文章:

标签云: