.net webservice怎么接收post过来的json_前后端交互json的理解和处理

    关于前后端的交互在前边的文章中已经进行了初步的理解,但是我感觉还得再进行一些扩充,这里的扩充主要是通过案例来进行讲解。

    案例需求分析:接收前端数据更具类型不同转换为不同类型的实体类

{"edorType":"A","data":{"A":"A1","B":"B1","C":"C1"}}{"edorType":"B","data":{"A":"A1","B":"B1","C":"C1","D":"D1"}}{"edorType":"C","data":{"A":"A1","B":"B1","C":"C1","D":"D1","E":"E1"}}{"edorType":"D","data":{"A":"A1","B":"B1","C":"C1","D":"D1","E":"E1","F":"F1"}}

更具edorType的实体类的不同进行转换为不同类型的实体类

这样为了实现我们前端接口的复用我们使用这样的方法进行实现,但是我得再此申明,这里单单是我处理这种需求的方式并不代表大众,所以有什么问题可以随时联系,咱们互相沟通共同进步

    首先我们明确前端如何将这些数据传递给我们,这里我就单单说方式,这里可以使用ajax进行实现,也可以使用form表单提交进行实现,当然我所知道的发送post请求的方式也就这么两种,别的还得大家多多指教。

    这里重点是后端的实现。试问后端如何实现呢?

1.@RequestParam(行,但是参数过多不合适)

我们知道我们要实现接收多个参数的时候使用注解@RequestParam肯定是不行的此参数只实现一个一个的接收,要是十多个属性那么就得进行编写十多个,这样显然是不合适的。

2.@PathVariable(不行)

这个注解是从url地址中获取参数(也就是我们前边学习额RestFul请求风格)同样获取的参数额数据也是当然也是一个具体额使用建议自行百度这里我只是简单提一句不想占用 过多的篇章。

3.@RequestBody(行)

这个注解是我们springmvc框架的额重点,不要问为什么springboot中没有引入springMvc那是spring-boot-star-web对其进行了封装这个注解主要是用来接收前端传来的多个json类型的数据而存在的,这样就可以用一个类来实现接收前端传来的多个数据但是有一点就是编写实体类的时候需要注意,实体类中的属性的的值一定要和json对象中的属性的name的值一定要一一对应否则接收不到。

具体代码实现:

    我们这里接收的类并不是固定的A或者是B而是有可能是A,B,C,D中的某一个,这样我们的这个接口就不能写的固定,但是我们还想使用一个接口来实现,请问怎样解决。

    实现使用类 JSONObject进行接收,这个类是json对象的类用来接收json对像

import net.sf.json.JSONObject;

包下的类

      <dependency>        <groupId>net.sf.json-libgroupId>        <artifactId>json-libartifactId>        <version>2.4version>        <classifier>jdk15classifier>      dependency>

控制层:

 @RequestMapping(value = "/ceshi", method = RequestMethod.POST) @ResponseBodypublic RestEntity ploicyComputing(@RequestBody JSONObject object) {    //1.进行接收参数中的edotype属性,更具此属性进行转换不同的类   String  edorType =(String) object.get("edorType"); //2.更具edorType的属性值进行转换为不同类型的实体类 注意: 在进行转换的时若是实体类中有属性是list类型的集合这里需要特殊额转换   //1.创建map    Map> classMap = new HashMap>();   //2.map中进行添加属性  key为实体类的属性,value为实体类额反射    classMap.put("headBankCode", HeadBankCode.class);    (这里HeadBankCode是自建类)    classMap.put("selectPhone",String.class);    classMap.put("map",Map.class);    classMap.put("属性名",类.class);只有存在上述的情况才会进行这样处理,否则会进行报错大概的内容就是数据太父砸不能进行转换。    //3.进行转换A a  = (A)JSONObject.toBean((A) object.get("data"), A.class, classMap);这样就将json转为对应的A实体类了}

但是当我们在进行确定了这里我们前端传来的多个json类型的数据就是不变的这样我们可以使用单独的一个类进行接收不用再进行别的额外特殊处理

 @RequestMapping(value = "/ceshi", method = RequestMethod.POST) @ResponseBodypublic RestEntity ploicyComputing(@RequestBody  A  a) {}

@ResponseBody和@RequestBody这两个一定要明确前者表名请求完成时响应的是一个json类型的实体类并不是要跳转的页面所以这个需要放在类中方法的上边,后者使用的是接收前端传来的参数。用在方法的参数中

上边的这个是我再工作中用用到的若是有什么疑问请加我微信咱们互相学习进步。

45c74e46e9ddeb2e947056a36f0343c9.png

Webservice是一种基于网络的应用程序接口(API),允许不同的应用程序之间进行交互。通常,它使用HTTP作为通信协议,并且可以接受POST和GET等HTTP请求。本文讨论的重点是如何使用Webservice接受POSTJSON数据。 首先,我们需要创建一个Webservice端点,以便接受客户端发送的POST请求。这个端点可以是一个URL或特定的API路径。在代码中,它可能会看起来像这样: ```java @Path("/webservice/json") public class MyWebService { @POST @Path("/receive") @Consumes(MediaType.APPLICATION_JSON) public Response receiveJSON(String jsonPayload) { // 处理JSON数据的代码 return Response.ok().build(); } } ``` 这是一个非常简单的例子,它定义了一个Webservice端点来接受POST请求,并使用@Path和@POST注解来设置基本属性。@Consumes注解告诉Webservice,预计接受的内容类型是JSON。在这里,我们期望客户端发送一个JSON字符串,它将被解析为“jsonPayload”参数。 在处理JSON数据后,我们需要返回一个HTTP响应。在本例中,我们只是返回HTTP状态200(OK),表示请求已成功处理。但是,您可以返回一个有用的响应,例如有关状态、结果或其他信息的数据。可以使用Response对象来设置响应内容。 最后,要使用我们的Webservice端点来接受POST请求,需要使用客户端应用程序发送请求。这可以由任何支持HTTP的客户端完成,例如浏览器、Curl、Postman或基于Java的Web客户端。下面是使用Java的HttpURLConnection类实现的简单示例: ```java URL url = new URL("http://localhost:8080/webservice/json/receive"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true); String jsonPayload = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}"; OutputStream outputStream = connection.getOutputStream(); outputStream.write(jsonPayload.getBytes()); outputStream.flush(); if (connection.getResponseCode() != 200) { throw new RuntimeException("Failed : HTTP error code : " + connection.getResponseCode()); } BufferedReader bufferedReader = new BufferedReader( new InputStreamReader((connection.getInputStream()))); String output; System.out.println("Output from Server:\n"); while ((output = bufferedReader.readLine()) != null) { System.out.println(output); } connection.disconnect(); ``` 这个例子设置了要发送JSON数据的URL,按照POST请求方法设置请求头,并将JSON数据放入输出流中。当我们从Webservice端点接受响应时,它将输出响应内容。换句话说,我们可以在控制台查看响应内容。 在实际应用中,Webservice端点将根据我们的需求进行开发,但是通过使用这些简单的方法来接受POSTJSON数据,可以轻松地将数据从客户端传递到服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值