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

智能推荐

超市出了新的活动:4个空汽水瓶可以换1瓶汽水。小明现在手上有n个空汽水瓶,他最多可以换多少瓶汽水喝?_商店规定每4个空瓶可以换一瓶汽水-程序员宅基地

文章浏览阅读1.5k次。#include<stdio.h>int main(){int n;//初始空瓶数int total;//总共喝到的可乐数int m=0;//上一次喝到的可乐数int t=0;//上一次喝完剩下的空瓶数int i=1;//进入循环结构while(i>0)/循环次数,可以自己定义/{total=0;scanf("%d",&n);m=n/4;t=m+n%4;total+=m;while(t>3){m=t/4;t=m+t%4;total+=m;}_商店规定每4个空瓶可以换一瓶汽水

LoadRunner参数化MySQL-程序员宅基地

文章浏览阅读41次。准备:安装【msql-ODBC驱动】一、配置数据源1、Win7,打开控制面板-系统和安全-管理工具,点击“数据源(ODBC)”.打开数据源(ODBC),在用户DSN选项卡中点击“添加”按钮,弹出“创建新数据源”窗口。点击“添加”,如下图:选中“MYSQLODBC5.2 ANSI Driver”,点击“完成”按钮。配置mysql的IP、用户名与密码,如下..._lr11利用mysql进行参数化设计

WCF初探-19:WCF消息协定-程序员宅基地

文章浏览阅读62次。WCF消息协定概述在生成 WCF应用程序时,开发人员通常会密切关注数据结构和序列化问题,而不必关心携带数据的消息结构。 对于这些应用程序,为参数或返回值创建数据协定的过程很简单。但是,有时完全控制 SOAP 消息的结构与控制其内容一样重要。 当必须提供互操作性或需要在消息或消息部分级别特别控制安全问题时,更是如此。 在这些情况下,您可以创建消息协定 ,使您可以指定所需的精确的 SOA...

L2TP/IPSec一键安装脚本-程序员宅基地

文章浏览阅读101次。本脚本适用环境:系统支持:CentOS6+,Debian7+,Ubuntu12+内存要求:≥128M更新日期:2017 年 05 月 28 日关于本脚本:名词解释如下L2TP(Layer 2 Tunneling Protocol)IPSec(Internet Protocol Security)IKEv2 (Internet Key Exchange v2)能实现 IPsec 的目前总体上有 ..._l2tp/ipsec一键安装脚本

一周总结 09.11.13-程序员宅基地

文章浏览阅读32次。用.NET环境开发机房收费系统这是一个中期任务,应用这大半年来学到的知识,用.NET做东西,说来容易,做来难呀。设计模式,一遍不够,两边太浅,一遍一遍慢慢体会;uml建模,多年开发经验的软件开发人员都不很熟练的操作rose的相关建模工具来进行软件建模,这说明什么呢?功成名就不是一蹴而就的,别急,别急,水到渠成,船到桥头自然直。总结这周,除了上课,就是来机房学习,还有...

转贴:win2008改造成准VISTA-程序员宅基地

文章浏览阅读123次。安装WINDOWS SERVER 2008前请确认你已经做好了以下准备:1.你的硬件必须满足下列要求处理器:最小: 1GHz 建议: 2GHz 最佳: 3GHz 或者更快速的内存: 最小: 512MB RAM建议: 1GB RAM最佳: 2GB RAM (完整安装) 或者 1GB RAM (Server Core 安装) 或者最大 (32位系统 ): 4GB (标准版) 或..._net framework 3.0支持开vista玻璃效果吗

随便推点

softmax_cross_entropy_with_logits与sparse_softmax_cross_entropy_with_logits的区别_softmax_cross_entropy_with_logits_v2 spars_softmax-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏4次。softmax_cross_entropy_with_logits与sparse_softmax_cross_entropy_with_logits的区别没有sparse:有sparse:对比代码最近学习了Policy Gradients,里面用到了sparse_softmax_cross_entropy_with_logits,很惊诧这是个what,查询了许多资料,做了一点实验,终于明白,这就..._softmax_cross_entropy_with_logits_v2 spars_softmax_cross_entropy_with_logits

2024年腾讯云免费服务器申请入口,个人和企业均可申请-程序员宅基地

文章浏览阅读337次,点赞5次,收藏8次。腾讯云免费服务器申请入口https://curl.qcloud.com/FJhqoVDP免费服务器可选轻量应用服务器和云服务器CVM,轻量配置可选2核2G3M、2核8G7M和4核8G12M,CVM云服务器可选2核2G3M和2核4G3M配置,腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费服务器申请入口、限制条件

Eclipse中安装Java Swing图形界面开发插件windowbuilder_eclipse中java图形用户界面语言装插件吗-程序员宅基地

文章浏览阅读1.8k次。今天给大家讲解一下,如何在eclipse中安装swing 插件windowbuilder,首先点击打开windowbuilder的官网下载地址,http://www.eclipse.org/windowbuilder/download.php ,打开后会看到有个eclipse的表格,我的eclipse是Oxygen,Oxygen没有发布版本,只有嵌入安装的版本,我就点击Oxygen那一行的link_eclipse中java图形用户界面语言装插件吗

使用tomcat打开html文件,为什么tomcat可以打开html文件,不能打开jsp文件呢?-程序员宅基地

文章浏览阅读6.5w次。慕莱坞6523339https://ditu.so.com/site/k/%E5%B9%BF%E5%B7%9E%E8%87%AA%E5%88%B6%E5%9C%9F%E6%B3%95%E8%BF%B7%E9%A6%99%E8%8D%AF%28%D0%97%D0%97%EF%BC%90%E2%92%907%E2%92%95%E2%92%8E4VX%29%E8%89%B0%E9%85%92%E5%BA..._%e7%be%8e%e5%9b%bd%e8%8a%af%e7%89%87%e5%b7%a8%e5%a4%b4%e4%b8%80%e5%a4%9c

使用delphi 10.2 开发linux 上的webservice-程序员宅基地

文章浏览阅读101次。前几天做了linux下apache的开发,今天做一个linux 下的webservice ,以供客户端调用。闲话少说,直接干。新建一个工程。选other...,选择如图。继续输入服务名然后就生成对应的单元。增加linux 平台。完善对应的单元代码{ Invokable implementation File for Txalion..._使用delphi 10.2 开发web应用

python学习第三个坑-程序员宅基地

文章浏览阅读50次。##########################python 第三章 ################################这一章呢,主要是文件的操作,还有涉及到函数的一部分.PS:整理博客很是费事,这就是我写的笔记,本来在线下挺好看的。拿到这里就成这熊样了,没办法。。。凑活着看吧文件操作:文件操作一般用open,或者用file,格式如下:变量名 = open('文件路径..._python3 wand optimize_layers

推荐文章

热门文章

相关标签