okhttp3 springboot post 接收与传参_java okhttp3接收请求体-程序员宅基地

技术标签: spring boot  笔记  java  android studio  windows  

利用Springboot做后端,安卓做前端的接收参数问题,直接上代码

##第一次发博客 有错误不恰当之处 还请大家批评指正,是基于okhttp3

// okhttp3网络框架 在你的build.gradle(Moudle)中添加
implementation(“com.squareup.okhttp3:okhttp:4.9.0”)


// android前端


// 请求地址为我springboot作为后端的地址
// 如果小伙伴使用手机或者模拟器都注意两个问题
// 第一  手机连接电脑wifi时,安卓有时候部署项目会出错错误 这时候需要你手机
//       首先断开电脑开的热点,再部署,再连接wifi,再测试

// 第二 如果你手机或者模拟器(因为模拟器很真实 不会认为和你的电脑在一个网络下,因此需要设置模拟器的wifi),使用的自己的网络(没有连接电脑wifi),极大可能不能访问okhttp所发送的请求
//      因为你们不在一个局域网下,因此正确的使用方式
//		是电脑开热点,手机连电脑的热点	 

// 解释下,我这里使用jsonObject仅仅是为了传入键值对类型参数而已,你也可以更改为map类型的形参,从而自己直接传入map集合,以获取数据
  register = OkHttpUtils.register("http://10.8.107.60:8080/register/",jsonObject,getApplication());

// 该方法是自定义OkHttpUtils下的静态方法
    public static String register(String url,JSONObject jsonObject,Context context) throws ExecutionException, InterruptedException {
    
    // 存放从后端接收的返回信息
    // 至于final 因为在线程中操作 只能定义为final类型的数组
        final String[] result = {
    "暂无信息!"};
        new Thread(){
    
            @Override
            public void run() {
    
                OkHttpClient okHttpClient = new OkHttpClient();
                RequestBody body = null;
                try {
    
 //  后端代码下面会有  这里的username需要后端的参数对应 
   // @RequestMapping("/register")
 // public String register(HttpServletRequest request,@RequestParam("username") String username,@RequestParam("password") String password)
                    body = new FormBody.Builder()
                            .add("username",jsonObject.getString("username"))
                            .add("password", jsonObject.getString("password"))
                            .build();
                } catch (JSONException e) {
    
                    e.printStackTrace();
                }
                Request request = new Request.Builder()
                        .url(url)
                        .post(body)
                        .build();
                Call call = okHttpClient.newCall(request);
                call.enqueue(new Callback() {
    
                    @Override
                    public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
    
   //这里特别注意,我翻看了源码,大致猜测是 response.body().string()只可以使用一次,反正我使用两次就会异常
//                        Log.e("回参",response.body().string());
                        result[0] = response.body().string();
                    }
                    @Override
                    public void onFailure(@NotNull Call call, @NotNull IOException e) {
    
                        Log.e("回参","错");
                    }
                });
            }
        }.start();
        // 这里也是我自己定义的一个方法 就是线程启动时,会耗时去访问后端是否注册成功,因为这个方法也会在主线程执行,因此如果不阻塞的话,该方法会较快的返回默认值,即("暂无信息");
        Thread.sleep(1000);
        return result[0];


// An highlighted block


//特别说明 这里为什么是使用的@RequestParam
// 因为刚刚我们使用的okhttp并没有使用json格式,而是默认格式,所以需要与参数名一致
@Controller
public class UserController {
    

  @Autowired
  UserService userService;

  @ResponseBody
  @RequestMapping("/register")
  public String register(HttpServletRequest request,@RequestParam("username") String username,@RequestParam("password") String password){
    
        System.out.println("收到请求");
    if(username!=null && password!=null){
    
          User user = new User();
          user.setTel(username);
          user.setPassword(password);
          if (userService.addUser(user)){
    
            return  "注册成功!";
          }
          return "注册失败!";
        }else {
    
          System.out.println("用户名或密码为空");
          return "注册失败,未接收到参数!!";
        }
  }
}
//======================================================================
//如果你想使用okhttp3传送json格式的,你应该这么做

        final String[] result = {
    ""};
        new Thread(){
    
            public void run(){
    
                MediaType type = MediaType.parse("application/json;charset=utf-8");
                RequestBody RequestBody2 = RequestBody.create(type,""+jsonObject.toString());
                try {
    
                    Log.e("对象:",jsonObject.toString());
                    OkHttpClient client = new OkHttpClient();
                    Request request = new Request.Builder()
                            // 指定访问的服务器地址
                            .url(url)
                            .addHeader("username",jsonObject.getString("username"))
                            .addHeader("password",jsonObject.getString("username"))
                            .post(RequestBody2)
                            .build();
                    Response response = client.newCall(request).execute();

                    String responseData = response.body().string();
                    Log.e("回参",responseData);

                    Looper.prepare();
                    Toast.makeText(context,responseData,Toast.LENGTH_LONG).show();
                    Looper.loop();
                    result[0] = responseData;
                } catch (Exception e) {
    
                    e.printStackTrace();
                }

            }
        }.start();
        return result[0];
// 你的后端只需要定义一个 User对象 里面只存放usernmae,pssword属性
//  并且在你的参数里这样,它就会自行解析
// 但是注意,这里只传送了一个json数据(因此它可以自行解析到你参数的User user 里),多个json我还在学习 哈哈哈
  @ResponseBody
  @RequestMapping("/register2")
  public String register2(HttpServletRequest request, @RequestBody User user){
    
    System.out.println("收到请求");
    if(user !=null){
    
      if (userService.addUser(user)){
    
        return  "注册成功!";
      }
      return "注册失败!";
    }else {
    
      System.out.println("用户名或密码为空");
      return "注册失败,未接收到参数!!";
    }
  }

特别说明,是基于springboot2.6 android7

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44694843/article/details/123782473

智能推荐

nginx 增加 lua模块-程序员宅基地

文章浏览阅读254次。Nginx中的stub_status模块主要用于查看Nginx的一些状态信息.本模块默认是不会编译进Nginx的,如果你要使用该模块,则要在编译安装Nginx时指定:./configure –with-http_stub_status_module 这个模块如果需要也可以加入######################### 下面是 lua模块unkno..._unknown directive "access_by_lua

大语言模型下载,huggingface和modelscope加速_modelscope下载 huggingface-程序员宅基地

文章浏览阅读1.1k次,点赞8次,收藏11次。大模型下载速度较快的方式,huggingface,modelscope_modelscope下载 huggingface

Gson [Maven依赖] 和一些简单的例子_gson maven依赖-程序员宅基地

文章浏览阅读4.3w次,点赞9次,收藏15次。Mavne依赖<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version></dependency>G_gson maven依赖

2024年美国大学生数学建模竞赛思路与源代码【2024美赛A题】_2024年美赛a题-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏15次。幼体的生长速度生长速度受到食物供应的影响。在食物供应较少的环境中、生长速度就会降低,雄性海灯鱼的比例可达到78%左右。在食物更容易获得的环境中,雄性的百分比据观察,雄性约占种群的56%。尽管许多物种在出生时的性别比例为1:1,但其他物种物种则偏离了均匀的性别比例。例如美洲鳄孵卵巢的温度会影响其出生时的性别比例。我们的任务是研究一个物种能够根据资源供应情况改变性别比例的利弊。灯鱼的作用十分复杂。而在世界上的一些地区,如斯堪的纳维亚半岛、波罗的海地区,以及太平洋地区的一些土著居民眼中,灯鱼也是一种食物来源。_2024年美赛a题

ntpd服务状态及日志查询方式_ntpd日志-程序员宅基地

文章浏览阅读1.5w次。ntpd服务状态及日志查询方式1.检查服务器时间同步运行状态和ntpd服务运行情况ntpd服务监听upd 123端口netstat -anp | grep udp1-2.检查服务器NTP状态ntpstat1-3、检查端口监听正常后,继续查询ntpd的运行日志和同步状态查看 ntp_servers 状态,通常ECS服务器的时钟源是指向OPS主机。ntpq -p代表时间服务器正在同步的时钟源服务器代表可以接受作为时钟源的服务器? 代表时间服务器不可达说明除了* , + 所代表的_ntpd日志

攻防世界-流浪者_攻防世界流浪者-程序员宅基地

文章浏览阅读344次。查壳无壳IDA推测str为输入字符串,限制为 0~9 a~z A~Zsub_4017B0是错误提示输出if判断后是v5分别对三个范围内的str进行对应操作最后将v5传给 sub_4017F0函数处理第一个while循环对a1(也就是传入的v5)的地址进行处理判断,然后用a1+4*v4为字符串下标检索字符串aAbcdefghiabcde。如果检索结果等于KanXueCTF2019JustForhappy 则正确解题先在字符串aAbcdefghiabcde里检索KanXueCTF201_攻防世界流浪者

随便推点

关于JVM-三色标记算法剖析-程序员宅基地

文章浏览阅读424次。白色:表示对象未被垃圾收集器访问过,这是可达性分析开始的阶段,所有的对象都是白色,如果分析结束阶段,还是白色,即代表不可达。灰色:表示对象被垃圾收集器访问过,但是至少还有一个引用没有被扫描过。黑色:表示对象已被垃圾收集器访问过了,并且这个对象所有对象都被扫描过了,它是安全存活的,如果有其它对象引用指向了黑色对象,无须重新扫描一遍。黑色对象不可能直接指向某个白色对象。

如何快速调出软键盘_天生我材必有用 | 如何快速的计算和调用防火阀、调节阀、铝合金风口等材料价格...-程序员宅基地

文章浏览阅读291次。应用场景:在项目中,通常会遇到防火阀、调节阀、铝合金风口等材料,已知其规格尺寸,需要通过计算公式,得出其价格,如下表所示。在品茗胜算软件里,在“工料汇总”界面调用我材助手,找到对应材料,点击“风阀风口”,软件内置了计算公式,自动读取规格尺寸,自动算出价格,点击“应用价格”,价格就直接应用到项目中了,省去了翻找公式、敲计算器的时间。当然也可以点击“扫描件”,调出当期这些材料的计算公式。如果..._品茗计价中风口信息价换算在哪里

设计模式系列-第二章(设计原则-SOLID)_设计模式第二章完整代码-程序员宅基地

文章浏览阅读108次。前言:SOLID 原则并非单纯的 1 个原则,而是由 5 个设计原则组成的,它们分别是:单一职责原则、开闭原则、里式替换原则、接口隔离原则和依赖反转原则,依次对应 SOLID 中的 S、O、L、I、D 这 5 个英文字母。一、单一职责原则(SRP) 单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP。一个类或者模块只负责完成一个职责(或者功能)。单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。单一职责原则通过..._设计模式第二章完整代码

mysql-workbench双击后无法启动解决方案_workbench双击无反应-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏8次。好久没更新了 这个问题我遇到了两次,一次是腾讯云服务器上,一次是我的电脑上,都是安装后点mysql-workbench没有任何反应。网上别的解决方案我就不说了,要是好使你们也不会找到这里。**很简单!你们首先去mysql-workbench得安装目的地哪里,找到这个东西**双击它!看看是不是这个结果然后去下载这个.dll文件之后把这个文件放到C:\Windows\System32 ..._workbench双击无反应

spoj8222 Substrings (后缀自动机)_spoj 8222-程序员宅基地

文章浏览阅读379次。spoj8222 Substrings题意:f[x]表示所有长度为 x 的子串中,出现次数的最大值。求所有f[x]方法:建立SAM,根据拓扑序找到长度为 x 的子串个数,更新一下就行了#include <stdio.h>#include <string.h>#define N 250010char str[N];int root,cnt=0,n,last..._spoj 8222

ERP系统之比较——SAP Oracle BAAN JDE SSA_jjdssap-程序员宅基地

文章浏览阅读1.1k次。ERP系统之比较——SAP Oracle BAAN JDE SSA_jjdssap