Spring如何从客户端接收json数据以及如何发送json数据到客户端(一)

        首先,Spring是没有自带json转换数据的包的,所有我们要自己导入json的包到类路径下,假如是使用Maven的话可以加入以下语句到pom.xml中,还有如果你是使用SpringBoot的话不用加json的包,SpringBoot 默认会使用 Json 作为响应报文格式。(我下面是选用springboot做的,因为最近在学习springboot)

        Maven的添加包(采用gson的包)

 
            com.google.code.gson
            gson
            2.8.5
            
       1、使用Spring接收json数据,要实现这点不难,只要在对应的形参对象上使用注解@RequestBody就可以了,例如
public class User {

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
然后在控制器的相应的方法的参数类型前使用@RequestBody
public User Post(@RequestBody  User user, HttpServletRequest httpServeltRequest, HttpServletResponse httpServletResponse) throws IOException {
        System.out.println(user);
        return user;
    }

注意,@RequestBody一定要在形参对象的类型前面,注意,Spring会调用类路径下的json包,但是它会根据json传递的键名和变量的域的名字进行匹配,而且还必须得有get和set(javaBean)的方法。例如一旦你这里把username写成UserName,json将解析不出来。

        一旦匹配成功,spring将自动把json中的参数赋值到对象中来。

        2、使用Spring发送json参数,对于这点,有两个方法,一是使用@ResponseBody,二是使用@RestController

@RequestMapping(method = RequestMethod.POST)
    public @ResponseBody User Post(@RequestBody  User user, HttpServletRequest httpServeltRequest, HttpServletResponse httpServletResponse) throws IOException {
        System.out.println(user);
        return user;
    }

@ResponseBody放在方法返回类型的前面,当加上@ResponseBody的时候,Spring会跳过正常的MVC流程,转而直接将数据以特定的形式发送的到客户端(可能是根据请求头中的数据类型)

        第二种是采用将@Controller改成@RestController的形式

@Controller
@RequestMapping("/json")
public class JsonController {

    @RequestMapping(method = RequestMethod.POST)
    public User Post(@RequestBody  User user, HttpServletRequest httpServeltRequest, HttpServletResponse httpServletResponse) throws IOException {
        System.out.println(user);
        return user;
    }
}
这样的效果跟@ResponseBody一样,但是不同的是这个类(JsonController )下面的全部方法都变成非正常MVC的形式,所以两种方式要选择性使用
  

你可能感兴趣的:(Spring,Framework)