spring mvc登录转化json数据

 楔子: 只会提交表单参数,不会提交Json的?

application/json  application/xml等格式数据,必须使用@RequestBody来使用。

【项目架构】:

【建立User类】:

package com.zhangyiyi.chapter1.domain;

import java.io.Serializable;

public class User implements Serializable {
    private String userName;
    private String phoneNum;
    private String passWd;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPhoneNum() {
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }

    public String getPassWd() {
        return passWd;
    }

    public void setPassWd(String passWd) {
        this.passWd = passWd;
    }
}

【Controller入口代码】:

 @PostMapping(value = "/login_json")
    public void loginJson(@RequestBody User user,HttpServletResponse response)throws Exception{
        ObjectMapper mapper=new ObjectMapper();//提供功能将java对象转换成对应的JSON
        logger.info(mapper.writeValueAsString(user));//将user对象转换成json输出
        user.setUserName("梳子不爱头发");//更改用户名
        response.setStatus(200);
        response.setContentType("text/html;charset=UTF-8");
        //将user类转成json输出到客户端
        response.getWriter().println(mapper.writeValueAsString(user));
    }

【postman访问】:

【返回值】:

注意:请求body名称必须与User类中属性名保持一致

【升级版】

以上的登录请求要求Json请求参数必须与User类中属性名保持一致,但是有时候需要取名不一致,比如java类是驼峰法命名,二postman更喜欢全部小写或者加下划线呢?不怕这里有@JsonProperty强大注解。

@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称。例如:

  @JsonProperty(value = "user_name")
    private String userName;
就是将userName属性序列化为user_name.

同样的代码,现在我们将postman的参数更改:

{
	"phone_num":"18390980140",
	"user_name":"ee",
	"password":"123456"
	
	
	
}

同样成功返回。Spring默认使用Jackson处理json工具

【使用fastjson转换工具】 :开源包,来自阿里巴巴https://github.com/alibaba/fastjson

【使用方式】:在pom里面加依赖:

   <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>

 代码:

  @PostMapping(value = "/login_json")
    public void loginJson(@RequestBody User user,HttpServletResponse response)throws Exception{
     //   ObjectMapper mapper=new ObjectMapper();//提供功能将java对象转换成对应的JSON
        logger.info(JSONObject.toJSONString(user));//将user对象转换成json输出
        user.setUserName("梳子不爱头发");//更改用户名
        response.setStatus(200);
        response.setContentType("text/html;charset=UTF-8");
        //将user类转成json输出到客户端
      //  response.getWriter().println(mapper.writeValueAsString(user));
        response.getWriter().println(JSONObject.toJSONString(user));
    }

这种转换方式倒是挺方便的。

输出同上

【升级版】:

SpringMVC提供直接将domain 对象转换成JSON的功能。代码简单到爆炸,只需要返回一个对象即可:

 @PostMapping(value = "/login_json")
    public Object loginJson(@RequestBody User user)throws Exception{
     
        user.setUserName("梳子不爱头发");//更改用户名
        userList.add(user);
        return user;

    }

输出如下:

利用springmvc自带工具可以很简单完成对象和json的数据转换 

猜你喜欢

转载自blog.csdn.net/u012763405/article/details/84141437