.net webservice怎么接收post过来的json_JSON和实体类之间的转换

啥也不说这就是工具 和上边的XML和实体类之间的相互转换一样,用就完事了。但是这就是初级程序员的想法,应该是知其然,然后知其所以然。想的稍微多一些,实现的方式多种多样,看看 你喜欢用哪个

实体类:

public class jsonToBean {    private  String a;    private  String b;    private  String c;    set/get/toString/空构造器自己写    }    

业务:

package cn.abchinalife.pos.ploicyQueryFirstPage.controller.JsonUtil;import net.sf.json.JSONObject;public class AAA {    public static void main(String[] args) {        JSONObject object = new JSONObject();        object.put("a","aaaa");        object.put("b","bbbb");        object.put("c","cccc");        /**         * 将json数据转换为对应的实体类         */        jsonToBean jsonToBean = (jsonToBean) JSONObject.toBean(object, jsonToBean.class);        System.out.println("lnPosPloicyDetail\n"+jsonToBean.toString());    }}

是不感觉简单,但是上述是最为简单的方式但是在设计到集合list等形式就不行了,我们在前端的时候通常来的post类型的请求都是json格式当然springmvc会自动给我们进行转换为我们创建的实体类,案例 如下

前端代码

<div>    <div id="touxiang" >        <img src="/static/image/defaule.jpg" style="width: 100px ;height: 100px;">    div>    <form action="/register" method="post"  enctype="multipart/form-data">        用户姓名<input type="text" value="" name="name">        <br>        用户密码<input type="text" value="" name="password">        <br>        用户头像<input type="file" value="" name="fil" id="image" onchange="showPhoto()">        <br>        <input type="submit" value="注册">    form>div>

后端代码

  /**     * 进行用户信息新增(单个)     * @param userRegist   注册用户信息     * @param fil    接收图片     * @param request   获取客户机信息     * @return     */    @RequestMapping("/register")    public String userRegist(User userRegist, MultipartFile fil, HttpServletRequest request) {        return userService.insertUser1( userRegist, fil, request);    }

    User.class

public class User {    private int  id;    private String name;    private String password;//用户姓名    private String path;    private String historyPath;

这里springmvc会自动自动进行转换将我们的前端传来的form中对的json数据转换为实体类,这里需要注意的是前端传来的json中的name属性和实体类中的属性名意义对应如 password

 这里的MultipartFile 是用来接收前端传来的图片数据HttpServletRequest 用来接收客户端的一些数据如:

bcd2441c0aa32502749aae75138f0a9b.png

2e4618b7e013a803fdd7f7714920434d.png

845e2d8f0d8ad6e1343d00c7cf890cdb.png

等,这个更具情况进行使用,看具体的业务需求。我现在的项目中基本上也就这三个还有就是

HttpServletResponse:

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。

ee5877081299886c6a3d6eb0306a9d9a.png

请求响应流程如下:

5f15c24a77ab449219d6f8e6378546f4.png

上述就是两个类,这两个类中存在很多的请求,自行可以进行百度查询,我就不复制粘贴了

这里进行整理一个为我之前项目中遇到的一个问题:

  1. 业务:

    前端传来数据格式如下

{"edorType":"A","data":"一堆数据"}

根据type中的类型转换为不同的实体类:

前端:------就是发送一堆json数据肯定是post请求什么方式随意是ajax或者是表单都可以

后端:-------

pom.xml

<dependency>    <groupId>net.sf.json-libgroupId>    <artifactId>json-libartifactId>    <classifier>jdk15classifier>dependency>
import net.sf.json.JSONObject; @RequestMapping(value = "/transBean", method = RequestMethod.POST)    @ResponseBody    public RestEntity ploicyComputing(@RequestBody JSONObject object) {        String  edorType =(String) object.get("edorType");        if("A".equals(edorType)){            /**             * 将json数据转换为对应的实体类             */            Map> classMap = new HashMap>();            classMap.put("headBankCode", HeadBankCode.class);            classMap.put("selectPhone",String.class);            LNPosPloicyDetail lnPosPloicyDetail = (LNPosPloicyDetail)JSONObject.toBean((JSONObject) object.get("data"), LNPosPloicyDetail.class, classMap);            System.out.println("lnPosPloicyDetail\n"+lnPosPloicyDetail.toString());

注:LNPosPloicyDetail 是一个实体类

 Map<String, Class>> classMap = new HashMap<String, Class>>();            classMap.put("headBankCode", HeadBankCode.class);            classMap.put("selectPhone",String.class);

这个的作用是什么呢:

主要是LNPosPloicyDetail 类中存在几个属性这些属性是list类型,数据结构相对来讲较为复杂,使用上述的方式使得数据转换成实体类而不报异常,这里常报出的异常大致是数据太过于复杂不能转换,其中headBankCode是LNPosPloicyDetail 的属性这个属性是list类型的几个这个属性的泛型是HeadBankCode类

同理selectPhone也是一个list集合其属性是String类型

类似就是这样别的都没啥了,这是我项目中遇到的。若是有什么疏漏,还得请大家多多交流:

259b2eb6309b7df20aac22d8e178fb5f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值