当前位置:   article > 正文

前后端交互对于json数据的处理和接收_后端怎么接将json存储在某个字段中

后端怎么接将json存储在某个字段中

一、前端传给后端json对象或json字符串

1.以json对象传递(Ajax默认模式)

后端这边没有什么限制都是可以接收到的,比如对象,单个参数等
通过注解@RequestParam进行接收

@ResponseBody
public String test(@RequestParam String username,@RequestParam String password){
}
  • 1
  • 2
  • 3
2.传递JSON字符串给后端(使用application/json格式)
//1.只能封装在实体对象中,不能单独设置参数
@RequestMapping(value="/testJson3",method={RequestMethod.POST})
@ResponseBody
public String testJson3(@RequestBody User user){
    System.out.println(user.getUsername());
    System.out.println(user.getPassword());
}
//2.封装到Map中
@RequestMapping(value="/testJson4",method={RequestMethod.POST})
@ResponseBody
public String testJson4(@RequestBody Map map){
    System.out.println(map.get("username"));
    System.out.println(map.get("password"));
}
//3.用String接收
@RequestMapping(value="/testJson5",method={RequestMethod.POST})
@ResponseBody
public String testJson5(@RequestBody String user) throws IOException{
    System.out.println(user);
    ObjectMapper mapper=new ObjectMapper();
    User user1=mapper.readValue(user,User.class);
    System.out.println(user1.getUsername());
    System.out.println(user1.getPassword());
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

二、后端返回给前端json格式的数据

1.使用jackson类库
  <!-- json -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

写一个将object转json,并通过response对象将json格式的数据返回给前端的方法

public class BaseController{
    protected static JsonFactory factory=mapper.getJsonFactory();
    //将对象转成json输出
    protected void writeJSON(Object obj) throws IOException{
        response.setContentType("text/html;charset=utf-8");
        JsonGenerator responseJsonGenerator=factory.createJsonGenerator(response.getOutputStream(),JsonEncoding.UTF8);
        responseJsonGenerator.writeObject(obj);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

后端调用

public class Result implements Serializable{
    private static final long serialVersionUID=2267751680865696851L;
    //是否成功
    private Boolean success=false;
    //返回消息
    private String message;
    //返回数据
    private Object data;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
@Controller
@RequestMapping("/sysuser")
public class SysUserController extends BaseController{
    @RequestMapping(value="/login")
    public void login() throws IOException{
        Result result=new Result();
        result.setMessage("登录成功");
        result.setSuccess(true);
        super.writeJSON(result);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
2. 使用springmvc的@RestController注解
//@RestController是@ResponseBody和@Controller的组合注解
//@Controller是用来响应页面的,如果是String类型的方法,则springmvc会跳转到响应的页面
//@ResponseBody是用来响应数据的,如果是对象类型的方法,则springmvc会将结果对象转成json格式输出给前端
//@ResponseBody注解返回响应体,直接将返回值序列化json;不需要自己再处理
@ResponseBody
public Admin loadForm(String username){
    Admin admin=adminService.findByUsername(username);
    return admin;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
3. 使用fastjson实现
<dependency>
	<groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
@Controller
@RequestMapping("/login")
public class TestController{
    @RequestMapping("/test")
    public void test(HttpServletResponse response)throws IOException{
        SysUser sysUser=new SysUser();
        sysUser.setLoginPass("123456");
        sysUser.setLoginAccount("小明");
        JSONObject jsonObject=(JSONObject)JSONObject.toJSON(sysUser);//创建json对象
        Map<String,String> map=new HashMap<>();
        map.put("phone","123456");
        map.put("status","ok");
        jsonObject.put("info",map);//设置Json对象的属性
        System.out.println(jsonObject.toString());//调用toString方法将json对象转换成json字符串
        //或者
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write(jsonObject.toJSONString());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
后台返回数据给前端,json中文乱码解决方法
  1. 只需要在spring-mvc.xml配置文件中配置一次就好,省去了我们重复写的麻烦

    <!--自定义消息转换器的编码,解决后台传输json回前台时,中文乱码问题-->
        <mvc:annotation-driven >
            <mvc:message-converters register-defaults="true">
                <bean class="org.springframework.http.converter.StringHttpMessageConverter" >
                    <property name = "supportedMediaTypes">
                        <list>
                            <value>application/json;charset=utf-8</value>
                            <value>text/html;charset=utf-8</value>
                            <!-- application 可以在任意 form 表单里面 enctype 属性默认找到 -->
                            <value>application/x-www-form-urlencoded</value>
                        </list>
                    </property>
                </bean>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" ></bean>
            </mvc:message-converters>
        </mvc:annotation-driven>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  2. 在后台的方法映射添加

    @RequestMapping(value="/getphone",produces="text/plain;charset=utf-8")
    
    • 1
4. 采用工具类,进行json格式转换带回

JSON-lib包是一个beans,collections,maps,java arrays和xml和json互相转换的包

工具类:ResponseUtil.java

public class ResponseUtil{
    public static void write(HttpServletResponse response,Object result) throws Exception{
        response.setContentType("text/html;charset=utf-8");
		response.addHeader("Access-Control-Allow-Origin", "*");
        PrintWriter out=response.getWriter();
        out.println(result.toString());
        System.out.println("带回的json字符串为:"+result.toString()+"类型为:"+result.getClass().getName());
        out.flush();
        out.close();
    }
    public static void main(String[] args)throws Exception{
        //在web运用控制层中调用
        JSONObject result=new JSONObject();//创建json对象
        JSONArray jsonArray=JSONArray.fromObject("name:zhangsan");//字符串转为json数组
        result.put("rows",jsonArray);//放入json数组中,并起个名字
        HttpServletResponse response=null;
        ResponseUtil.write(response,result);//将result写入response带回前端
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/509602
推荐阅读
相关标签
  

闽ICP备14008679号