Retrofit网络请求参数注解

android 网络框架-Retrofit(二) Xml格式配置 你好,我是kpioneer 你好,我是Jeason 你好,我是Cook 注意:@Root:注解代表Xml根节点(需要在类上面使用) 例如: @Element:注解代表根节点中下面子节点 例如:<user></user> @Attribute:注解代表标签页中的属性 例如:userid = '1' @Te... 阅读详情
1.Retrofit介绍

retrofit是在okhttp的基础上进行封装的,网络请求是通过okhttp实现的。

具体使用细节可查看retrofit官网

2.Retrofit注解

Retrofit通过注解的方式,进行网络请求。根据功能分类,注解可以分为:

2.1请求方法类:
编号名称
1GET
2POST
3PUT
4DELETE
5PATCH
6HEAD
7OPTIONS
8HTTP

1.GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、HTTP(编号8,可以代替上面7个)
2.分别对应 HTTP 的请求方法;(最后的HTTP除除外)
3.接收一个字符串表示接口 path ,与 baseUrl 组成完整的 Url;
4.可以不指定,结合 @Url 注解使用;
5.url 中可以使用变量,如 {id} ,并使用 @Path(“id”) 注解为 {id} 提供值;
对于编号8,HTTP的使用方法如下:
  有 3 个属性:method、path、hasBody

public interface RetrofitService
{
    @HTTP(method = "get", path = "new{id}", hasBody = false)
    Call<ResponseBody> getNew(@Path("id") int id);
}
2.1.1:GET
  • 一个简单的Get请求
public interface RetrofitService
{
    // http://192.168.1.102/api/News
    @GET("News")
    Call<NewsBean> getItem();
}
  • URL中有参数的Get请求
public interface RetrofitService
{
    // http://192.168.1.102/api/News/1
    // http://192.168.1.102/api/News/{资讯id}
    @GET("News/{newsId}")
    Call<NewsBean> getItem(@Path("newsId") String newsId);

    // http://192.168.1.102/api/News/1/类型1
    // http://192.168.1.102/api/News/{资讯id}/{类型}
    @GET("News/{newsId}/{type}")
    Call<NewsBean> getItem(@Path("newsId") String newsId, @Path("type") String type);
}
  • 参数在URL问号之后的Get请求
public interface RetrofitService
{
    // http://192.168.1.102/api/News?newsId=1
    // http://192.168.1.102/api/News?newsId={资讯id}
    @GET("News")
    Call<NewsBean> getItem(@Query("newsId") String newsId);

    // http://192.168.1.102/api/News?newsId=1&type=类型1
    // http://192.168.1.102/api/News?newsId={资讯id}&type={类型}
    @GET("News")
    Call<NewsBean> getItem(@Query("newsId") String newsId, @Query("type") String type);
}
  • 多个参数在URL问号之后,且个数不确定的Get请求
public interface RetrofitService
{
    // http://192.168.1.102/api/News?newsId=1&type=类型1...
    // http://192.168.1.102/api/News?newsId={资讯id}&type={类型}...
    @GET("News")
    Call<NewsBean> getItem(@QueryMap Map<String, String> map);

    // http://192.168.1.102/api/News?newsId=1&type=类型1...
    // http://192.168.1.102/api/News?newsId={资讯id}&type={类型}...
    @GET("News")
    Call<NewsBean> getItem(@Query("newsId") String newsId, @QueryMap Map<String, String> map);
}
2.1.2: POST
  • 需要补全URL,post的数据只有一条reason的Post请求
public interface RetrofitService
{
    // http://192.168.1.102/api/Comments/1
    // http://192.168.1.102/api/Comments/{newsId}
    @FormUrlEncoded
    @POST("Comments/{newsId}")
    Call<Comment> reportComment(@Path("newsId") String commentId, @Field("reason") String reason);
}
  • 需要补全URL,问号后加入access_token,post的数据只有一条reason的Post请求
public interface RetrofitService
{
    // http://192.168.1.102/api/Comments/1?access_token=1234123
    // http://192.168.1.102/api/Comments/{newsId}?access_token={access_token}
    @FormUrlEncoded
    @POST("Comments/{newsId}")
    Call<Comment> reportComment(
            @Path("newsId") String commentId,
            @Query("access_token") String access_token,
            @Field("reason") String reason);
}
  • 需要补全URL,问号后加入access_token,post一个body(对象)的Post请求
public interface RetrofitService
{
    // http://192.168.1.102/api/Comments/1?access_token=1234123
    // http://192.168.1.102/api/Comments/{newsId}?access_token={access_token}
    @POST("Comments/{newsId}")
    Call<Comment> reportComment(
            @Path("newsId") String commentId, 
            @Query("access_token") String access_token, 
            @Body CommentBean bean);
}
2.1.3:DELETE
  • 需要补全URL的Delete请求
public interface RetrofitService
{
    // http://192.168.1.102/api/Comments/1
    // http://192.168.1.102/api/Comments/{commentId}
    @DELETE("Comments/{commentId}")
    Call<ResponseBody> deleteNewsCommentFromAccount(@Path("commentId") String commentId);
}
  • 需要补全URL,问号后加入access_token的Delete请求
public interface RetrofitService
{
    // http://192.168.1.102/api/Comments/1?access_token=1234123
    // http://192.168.1.102/api/Comments/{commentId}?access_token={access_token}
    @DELETE("Comments/{commentId}")
    Call<ResponseBody> deleteNewsCommentFromAccount(@Path("commentId") String commentId, @Query("access_token") String access_token);
}
  • 带有body的Delete请求
public interface RetrofitService
{
    // http://192.168.1.102/api/Comments
    @HTTP(method = "DELETE",path = "Comments",hasBody = true)
    Call<ResponseBody> deleteCommont(@Body CommentBody body);
}
2.1.4:PUT
public interface RetrofitService
{
    // http://192.168.1.102/api/Accounts/1
    // http://192.168.1.102/api/Accounts/{accountId}
    @PUT("Accounts/{accountId}")
    Call<ExtrasBean> updateExtras(@Path("accountId") String accountId, @Query("access_token") String access_token, @Body ExtrasBean bean);
}
2.2标记类:
2.2.1:FormUrlEncoded

FormUrlEncoded:
1.用于修饰Field注解和FieldMap注解
2.使用该注解,表示请求正文将使用表单网址编码。字段应该声明为参数,并用@Field注释或FieldMap注释。使用FormUrlEncoded注解的请求将具”application / x-www-form-urlencoded” MIME类型。字段名称和值将先进行UTF-8进行编码,再根据RFC-3986进行URI编码.

2.2.2:Multipart

Multipart:
1.作用于方法
2.使用该注解,表示请求体是多部分的。 每一部分作为一个参数,且用Part注解声明

上传单个文件

接口

public interface RetrofitService
{
    @Multipart
    @POST("/uploadImgs")
    Call<ResponseServer<List<PicResultData>>> uploadSingleImg(@Part("description") RequestBody description, @Part MultipartBody.Part file);
}

实现

public void uploadImg(Object pcObj, String fileUrl) 
{
    File file = new File(fileUrl);
    // 创建 RequestBody,用于封装构建RequestBody
    // RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    RequestBody requestFile = RequestBody.create(MediaType.parse("image/jpg"), file);

    // MultipartBody.Part  和后端约定好Key,这里的partName是用file
    MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);

    // 添加描述
    String descriptionString = "hello, 这是文件描述";
    RequestBody description = RequestBody.create(MediaType.parse("multipart/form-data"), descriptionString);

    // 执行请求
    serviceApi.uploadSingleImg(description, body).enqueue(new BaseViewModel.HttpRequestCallback<List<PicResultData>>() 
    {
        @Override
        public void onSuccess(List<PicResultData> result) 
        {
            super.onSuccess(result);
        }

        @Override
        public void onFailure(int status, String message) 
        {
            super.onFailure(status, message);
        }
    });
}
上传多个文件

接口

public interface RetrofitService
{
    @Multipart
    @POST("/uploadImgs")
    Call<ResponseServer<List<PicResultData>>> uploadMultiImgs(@PartMap Map<String, RequestBody> maps);
}

实现

public void uploadImgs(Object pcObj, List<String> imgStrs) 
{
    Map<String, RequestBody> map = new HashMap<>();
    for (String imgUrl : imgStrs) 
    {
        File file = new File(imgUrl);
        // create RequestBody instance from file
        // RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
        RequestBody requestFile = RequestBody.create(MediaType.parse("image/jpg"), file);
        // 注意:file就是与服务器对应的key,后面filename是服务器得到的文件名
        map.put("file\"; filename=\"" + file.getName(), requestFile);
    }

    // 执行请求
    serviceApi.uploadMultiImgs(map).enqueue(new BaseViewModel.HttpRequestCallback<List<PicResultData>>() 
    {
        @Override
        public void onSuccess(List<PicResultData> result) 
        {
            super.onSuccess(result);
        }

        @Override
        public void onFailure(int status, String message) 
        {
            super.onFailure(status, message);
        }
    });
}
2.2.3:Streaming

Streaming:
1.作用于方法
2.处理返回Response的方法的响应体,即没有将body()转换为byte []
3.响应体的数据用流的形式返回
4.未使用该注解,默认会把数据全部载入内存,之后通过流获取数据也是读取内存中数据,所以返回数据较大时,需要使用该注解

public interface RetrofitService
{
    @Streaming
    @GET("/update_apk")
    Call<ResponseServer<News>> downloadFile(@Url String fileUrl);
}
2.3参数类:
2.3.1:Headers

Headers:
1.作用于方法,用于添加一个或多个请求头
2.使用 @Headers 注解设置固定的请求头,所有请求头不会相互覆盖,即使名字相同

定义Headers

public interface RetrofitService
{
    // 添加一个请求体
    @Headers("Cache-Control: max-age=640000")
    @GET("/widget/list")
    Call<List<Widget>> widgetList();

    // 添加多个请求体
    @Headers({"Accept: application/vnd.yourapi.v1.full+json", "User-Agent: Your-App-Name"})
    @GET("/users/{username}")
    Call<User> getUser(@Path("username") String username)
}

使用Headers,需要使用拦截器

private RetrofitHelper()
{
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.addInterceptor(new Interceptor()
    {
        @Override
        public Response intercept(Chain chain) throws IOException
        {
            Request original = chain.request();

            Request request = original.newBuilder()
                    .header("User-Agent", "Your-App-Name")
                    .header("Accept", "application/vnd.yourapi.v1.full+json")
                    .method(original.method(), original.body())
                    .build();

            return chain.proceed(request);
        }
    });

    OkHttpClient client = builder.build();
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL_WEATHER)
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();
}
2.3.2:Header

Header:
1.作用于方法参数(形参)
2.使用 @Header 注解动态更新请求头,匹配的参数必须提供给 @Header ,若参数值为 null ,这个头会被省略;当传入一个List或array时,为拼接每个非空的item的值到请求头中
3.具有相同名称的请求头不会相互覆盖,而是会照样添加到请求头中

public interface RetrofitService
{
    @GET("/tasks")
    Call<List<Task>> getTasks(@Header("Content-Range") String contentRange);
}
2.3.3:Body

Body:
1.作用于方法参数(形参)
2.使用该注解定义的参数不可为null
3.当发送一个post或put请求,但是又不想作为请求参数或表单的方式发送请求时,使用该注解定义的参数可以直接传入一个实体类,retrofit会通过convert把该实体序列化并将序列化后的结果直接作为请求体发送出去;如果提交的是一个Map,那么作用相当于 @Field

public interface RetrofitService
{
    @GET("/users/new")
    Call<ResponseBody> createUser(@Body RequestBody requestBody);
}
2.3.4:Field

Field:
1.作用于方法参数(形参)
2.发送 Post请求 时提交请求的表单字段,与 @FormUrlEncoded 注解配合使用
3.用String.valueOf()把参数值转换为String,然后进行URL编码,当参数值为null值时,会自动忽略,如果传入的是一个List或array,则为每一个非空的item拼接一个键值对,每一个键值对中的键是相同的,值就是非空item的值,如: name=张三&name=李四&name=王五,另外,如果item的值有空格,在拼接时会自动忽略,例如某个item的值为:张 三,则拼接后为name=张三.

public interface RetrofitService
{
    // 普通参数
    @FormUrlEncoded
    @POST("/users/addphoto")
    Call<List<Repo>> listRepos(@Field("time") long time);

    // 固定或可变数组
    @FormUrlEncoded
    @POST("/users/addphoto")
    Call<List<Repo>> listRepos(@Field("name") String... names);
}
2.3.5:FieldMap

FieldMap:
1.作用于方法参数(形参)
2.表单字段,与 Field、FormUrlEncoded 配合;接受 Map<String, String> 类型,非 String 类型会调用 toString() 方法
3.map中每一项的键和值都不能为空,否则抛出IllegalArgumentException异常

public interface RetrofitService
{
    @FormUrlEncoded
    @POST("/things")
    Call<List<Repo>> things(@FieldMap Map<String, String> params);
}
2.3.6:Part

Part:
1.作用于方法参数(形参)
2.post请求时,提交请求的表单字段,与 @ Multipart注解 配合
3.使用该注解定义的参数,参数值可以为空,为空时,则忽略
4.使用该注解定义的参数类型有以下3种方式可选:
a, 如果类型是okhttp3.MultipartBody.Part,内容将被直接使用。 省略part中的名称,即 @Part MultipartBody.Part part
b, 如果类型是RequestBody,那么该值将直接与其内容类型一起使用。 在注释中提供part名称(例如,@Part(“foo”)RequestBody foo)
c, 其他对象类型将通过使用转换器转换为适当的格式。 在注释中提供part名称(例如,@Part(“foo”)Image photo)

上传单个文件

接口

public interface RetrofitService
{
    @Multipart
    @POST("/uploadImgs")
    Call<ResponseServer<List<PicResultData>>> uploadSingleImg(@Part("description") RequestBody description, @Part MultipartBody.Part file);
}

实现

public void uploadImg(Object pcObj, String fileUrl) 
{
    File file = new File(fileUrl);
    // 创建 RequestBody,用于封装构建RequestBody
    // RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    RequestBody requestFile = RequestBody.create(MediaType.parse("image/jpg"), file);

    // MultipartBody.Part  和后端约定好Key,这里的partName是用file
    MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);

    // 添加描述
    String descriptionString = "hello, 这是文件描述";
    RequestBody description = RequestBody.create(MediaType.parse("multipart/form-data"), descriptionString);

    // 执行请求
    serviceApi.uploadSingleImg(description, body).enqueue(new BaseViewModel.HttpRequestCallback<List<PicResultData>>() 
    {
        @Override
        public void onSuccess(List<PicResultData> result) 
        {
            super.onSuccess(result);
        }

        @Override
        public void onFailure(int status, String message) 
        {
            super.onFailure(status, message);
        }
    });
}
2.3.7:PartMap

PartMap:
1.作用于方法参数(形参)
2.post请求时,提交请求的表单字段,与 @ Multipart注解 配合
3.map中每一项的键和值都不能为空,否则抛出IllegalArgumentException异常
4.使用该注解定义的参数类型有以下2种方式可选:
a, 如果类型是RequestBody,那么该值将直接与其内容类型一起使用
b, 其他对象类型将通过使用转换器转换为适当的格式。
5.携带的参数类型更加丰富,包括数据流,所以适用于 有文件上传 的场景

上传多个文件

接口

public interface RetrofitService
{
    @Multipart
    @POST("/uploadImgs")
    Call<ResponseServer<List<PicResultData>>> uploadMultiImgs(@PartMap Map<String, RequestBody> maps);
}

实现

public void uploadImgs(Object pcObj, List<String> imgStrs) 
{
    Map<String, RequestBody> map = new HashMap<>();
    for (String imgUrl : imgStrs) 
    {
        File file = new File(imgUrl);
        // create RequestBody instance from file
        // RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
        RequestBody requestFile = RequestBody.create(MediaType.parse("image/jpg"), file);
        // 注意:file就是与服务器对应的key,后面filename是服务器得到的文件名
        map.put("file\"; filename=\"" + file.getName(), requestFile);
    }

    // 执行请求
    serviceApi.uploadMultiImgs(map).enqueue(new BaseViewModel.HttpRequestCallback<List<PicResultData>>() 
    {
        @Override
        public void onSuccess(List<PicResultData> result) 
        {
            super.onSuccess(result);
        }

        @Override
        public void onFailure(int status, String message) 
        {
            super.onFailure(status, message);
        }
    });
}
2.3.8:Path

Path:
1.作用于方法参数(形参)
2.在URL路径段中替换指定的参数值。
3.使用String.valueOf()和URL编码将值转换为字符串。
4.使用该注解定义的参数的值不可为空参数值默认使用URL编码

public interface RetrofitService
{
    @GET("/data/sk/{cityId}.html")
    Call<ResponseBody> getWeatherByCityId(@Path("cityId") String cityId);
}
2.3.9:Query

Query:
1.作用于方法参数(形参)
2.用于添加查询参数,即请求参数(Query = Url 中 ‘?’ 后面的 key-value)
3.参数值通过String.valueOf()转换为String并进行URL编码
4.使用该注解定义的参数,参数值可以为空,为空时,忽略该值,当传入一个List或array时,为每个非空item拼接请求键值对,所有的键是统一的,如: name=张三&name=李四&name=王五.

public interface RetrofitService
{
    // 普通参数
    @GET("/list")
    Call<ResponseBody> list(@Query("catrgory") String catrgory);

    // 传入一个数组
    @GET("/list")
    Call<ResponseBody> list(@Query("catrgory") String... catrgory);

    // 不进行URL编码
    @GET("/search")
    Call<ResponseBody> list(@Query(value="foo", encoded=true) String foo);
}
2.3.10:QueryMap

QueryMap:
1.作用于方法参数(形参)
2.以map的形式添加查询参数,即请求参数
3.参数的键和值都通过String.valueOf()转换为String格式
4.map的键和值默认进行URL编码map中每一项的键和值都不能为空,否则抛出IllegalArgumentException异常

public interface RetrofitService
{
    // 使用默认URL编码
    @GET("/search")
    Call<ResponseBody> list(@QueryMap Map<String, String> filters);

    // 不使用默认URL编码
    @GET("/search")
    Call<ResponseBody> list(@QueryMap(encoded=true) Map<String, String> filters);
}
2.3.11:Url

Url:
1.作用于方法参数(形参)
2.直接传入一个请求的 URL变量 用于URL设置

public interface RetrofitService
{
    @GET
    Call<ResponseBody> urlAndQuery(@Url String url, @Query("showAll") boolean showAll);
}
3.参数注解小结:

1.Map 用来组合复杂的参数;
2.Query、QueryMap 与 Field、FieldMap 功能一样,生成的数据形式一样;
Query、QueryMap 的数据体现在 Url 上;
Field、FieldMap 的数据是请求体;
3.{占位符}和 PATH 尽量只用在URL的 path 部分,url 中的参数使用 Query、QueryMap 代替,保证接口的简洁;
4.Query、Field、Part 支持数组和实现了 Iterable 接口的类型, 如 List、Set等,方便向后台传递数组。

4.注意事项:

1,以上部分注解真正的实现在ParameterHandler类中,每个注解的真正实现都是ParameterHandler类中的一个final类型的内部类,每个内部类都对各个注解的使用要求做了限制,比如参数是否可空,键和值是否可空等.
2,FormUrlEncoded注解和Multipart注解不能同时使用,否则会抛出methodError(“Only one encoding annotation is allowed.”);可在ServiceMethod类中parseMethodAnnotation()方法中找到不能同时使用的具体原因.
3,Path注解与Url注解不能同时使用,否则会抛出parameterError(p, “@Path parameters may not be used with @Url.”),可在ServiceMethod类中parseParameterAnnotation()方法中找到不能同时使用的具体代码.其实原因也很好理解: Path注解用于替换url路径中的参数,这就要求在使用path注解时,必须已经存在请求路径,不然没法替换路径中指定的参数啊,而Url注解是在参数中指定的请求路径的,这个时候指定请求路径已经晚了,path注解找不到请求路径,更别提更换请求路径中的参数了.
4,对于FiledMap,HeaderMap,PartMap,QueryMap这四种作用于方法的注解,其参数类型必须为Map的实例,且key的类型必须为String类型,否则抛出异常(以PartMap注解为例):parameterError(p, “@PartMap keys must be of type String: ” + keyType);
5,使用Body注解的参数不能使用form 或multi-part编码,即如果为方法使用了FormUrlEncoded或Multipart注解,则方法的参数中不能使用Body注解,否则抛出异常parameterError(p, “@Body parameters cannot be used with form or multi-part encoding.”);

Retrofit 注解参数详解 文章目录GET@Path@Query@QueryMapPOST@Bodyform表单1:@FormUrlEncodedform表单2:FormBody@Multipart上传文件 对Retrofit已经使用了一点时间了,是时候归纳一下各种网络请求的service了。 下面分为GET、POST、DELETE还有PUT的请求,说明@Path、@Query、@QueryMap、@Body、@Field的用法。 添加依赖 implementation 'com.squareup.retrofit2:retrofit 阅读详情

相关推荐

Retrofit网络请求参数注解 @Query 和@Path的区别

在研究retrofit时,发现了一个问题,就是传参数的方式有很多种,我们需要根据后台接口的不同来确定对应的传参方式。 首先我们初始化Retrofit: String BASE_URL = "http://192.168.0.1/api/"; Retrofit retrofit = new Retrofit.Builder() .baseUrl...

Bentley_li的博客 1526

Retrofit网络请求参数注解,@Path、@Query、@Post、Body等总结

Retrofit网络请求参数注解,@Path、@Query、@Post、Body等总结具体用法 -

郭昊的博客 8万+

stata:stata软件教程(人大十八讲)(1) 第一章 stata入门

第一章 stata入门1.1 安装1.2 启用和退出1.3 打开和查看数据1.4 寻求帮助与网络资源1.5 命令示例1.6 几个环境设置1.7 复习与练习1.8 附录 注:教材为:Stata 统计分析教程 stata软件教程(人大十八讲) 中国人民大学出版社 陈传波 1.1 安装 1.2 启用和退出 1.3 打开和查看数据 1.4 寻求帮助与网络资源 1.5 命令示例 1.6 几个环境设置 1.7 复习与练习 1.8 附录 ...

qq_47805483的博客 1万+

Retrofit常见注解 最详细解析

Android开发圈中这三者Retrofit+RxJava+MVP结合使用的频率已经相当高了,很多圈内大神也已经总结了很多有关于整合这三者的博客,已经很多了,今天写这篇文章主要就不再介绍了。不过很多人并不了解Retrofit的全部注解使用,今天的重点就是要介绍日常常用的Retrofit的注解。 1、什么是Retrofit? Retrofit 是一个Square开发的安卓客户端请求库。其中内部封...

冯旭的博客 2858

如何创建属于自己的大语言模型:从零开始的指南

随着人工智能的快速发展,大语言模型(LLM)在各种场景中表现出了卓越的能力,例如文本生成、对话交互和内容总结等。本文将带你了解创建 LLM 的核心步骤,从理论到实践,让你拥有一个自己的智能助手。

赵大仁的博客 3280

Spring AI实现RAG(检索增强生成)详解与实践

支持多种文件格式的文档加载实现高效的向量存储和检索构建智能的问答系统提供可追溯的知识服务RAG技术为AI应用提供了强大的知识增强能力,使得模型能够基于实际文档生成准确、可靠的回答。

beiduofen2011的专栏 1238

Retrofit各个注解的含义及作用

写在前面本篇文章基于retrofit-2.1进行分析.1. 各个注解的含义及使用1.1 Body注解: 作用于方法的参数 使用该注解定义的参数不可为null 当你发送一个post或put请求,但是又不想作为请求参数或表单的方式发送请求时,使用该注解定义的参数可以直接传入一个实体类,retrofit会通过convert把该实体序列化并将序列化后的结果直接作为请求体发送出去. 示例: //实体

qiang_xi的专栏 3万+

【原创,解决CLodop安装后无法调用的问题】已经安装过CLodop,但是网页上仍然提示“clodop云打印服务(localhost本地)未安装启动,点击这里执行安装....”

在某些国内web网站中,需要安装一个名为“CLodop”的插件;但在实际使用过程中,即使安装了CLodop插件,网页试图调用它时还是会提示“clodop云打印服务(localhost本地)未安装启动,点击这里执行安装...”,且无法完成相关打印任务 本文属原创博客,分析了解决CLodop无法被调用的问题,并附上了原理和解决方法,本质上是和跨域请求以及CORS类安全组策略相关

link_in_csdn的博客 2万+

Android Retrofit 网络请求参数注解

//@POST 增 @DELETE 删 @PUT 改 @GET 查 //普通表单,key-value //@Field和@Body区别: //@Field:用于POST请求,提交单个数据 //@Body:相当于多个@Field,以对象的形式提交 //@GET //使用@Query 拼接参数查询,获取后台数据,原来 http://192.168.43.173/api/...

7758258博客 1939

YOLOv11改进策略【Neck】| SEAM:分离和增强注意模块,解决复杂场景下的小目标遮挡问题

本文记录的是利用 SEAM 模块优化 YOLOv11 的目标检测网络模型。的设计出发点在于解决复杂场景下的人脸遮挡问题,相当于是小目标被其他物体部分遮挡时,传统方法因特征缺失导致检测精度下降的问题。该模块通过增强未遮挡区域的特征响应并补偿被遮挡区域的信息损失,提升模型对遮挡小目标的检测能力。YOLO-FaceV2: A Scale and Occlusion Aware Face DetectorSEAM模块(Separated and Enhancement Attention Module)的设计出发点

Limiiiing的博客 2281

自动驾驶大模型---小米&华科的ORION端到端方案

本文介绍了小米汽车与华中科技大学联合开发的ORION自动驾驶端到端方案。该框架创新性地将视觉语言模型(VLM)与自动驾驶系统结合,包含QT-Former特征提取模块、大语言模型(LLM)推理模块和生成式规划器三大核心组件。通过视觉感知与语言理解的深度融合,ORION能更准确地理解人类指令并生成合理轨迹,同时提升系统的可解释性。实验证明,该方案在准确性、泛化能力和决策透明度方面均有显著优势。ORION框架为自动驾驶技术提供了新思路,有望推动行业向更安全、智能的方向发展。

智能汽车人的博客 2005

Retrofit不同网络请求方式的请求参数配置,Retrofit常用注解的使用

原文:https://www.jianshu.com/p/bca05b853c8c 《一》四种网络请求方式: GET : 向服务器发起数据请求,获取信息。类似于数据库的select操作,只是查询,不会影响资源的内容。 POST : 向服务器发送数据,该请求会改变数据的种类等资源。类似于数据库的insert操作,会创建新的内容。 DELETE:用来删除某一个资源。类似于数据库的delet...

qq_40384776的博客 937

智能 Agent 跨模态决策机制实战:多源数据融合与感知驱动行为策略设计

随着智能 Agent 应用从结构化文本处理拓展至图像识别、语音交互、传感器响应等多模态环境,其决策机制也面临从单模态语言理解向“多源感知驱动行为选择”的系统跃迁。本文聚焦跨模态输入下的 Agent 决策体系,系统性解析多源数据建模、感知融合方式、模态对齐机制、输入权重控制策略与策略引擎适配路径,进一步结合多模态提示构建、模态感知异常检测、模态优先级路由调度等工程问题进行实战拆解。通过企业级智能客服、制造车间控制、智慧医疗助手等典型案例,本文提供面向真实场景的跨模态 Agent 架构与多输入决策融合方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1353

Android知识梳理:Retrofit网络请求参数注解

前言 作为当下最流行的网络请求框架之一,Retrofit使用通俗简洁的注解就实现了网络请求url等一系列设置,下面就这些注解进行一次学习记录 大纲 1.请求方式注解 2.URL拼接方式 3.标记和参数 4.解析器和适配器 5.应用实例 正文 1.请求方式注解 一般请求方式有如下几种 @GET、@POST、@HEAD、@PUT、@HTTP... 以上注解之后一般带的是接口,u...

Demo_Jin的博客 965

微信小程序、H5微信公众号网页JSAPI:解决报错requestMerchantTransfer:fail:internal error(使用wx.requestMerchantTransfer错误)

如何解决requestMerchantTransfer:fail:internal error,微信小程序wx.requestMerchantTransfer报错,微信公众号H5网页使用jssdk调用wx.requestMerchantTransfer报错,JSAPI调起用户确认收款报错errMsg:“requestMerchantTransfer:fail:internal error“,微信小程序/H5 调起确认收款界面,JSAPI调起用户确认收款,微信公众号(H5),用户发起提现,商家转账给用户,用户

✅ 精选推荐文章 4968

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Retrofit 网络请求参数注解@Path @Field @Query 等使用

请求参数呢大致如下,到个别人的图, 下面就说下这些内容使用 其中@Path、@Query、@QueryMap 使用 Get 请求 , 加入使用了Post 请求注解使用@Path 一般都会是项目崩溃的, 所以这里我总结了一下自己使用的经验 1 @Path 会是url 中带有参数一般配合{} 一起 @GET("toutiao/index/{type}/{key}") Ob...

小牧在一直在学习,在前进的道路上大家一起学习,进步。 9503

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android retrofit注解,我喜欢 最全的Retrofit 网络请求参数注解说明

简单的请求(无参的请求)@GET("users")CallURL :http://192.168.0.1/api/users@POST("users")CallURL :http://192.168.0.1/api/users1、@Path注解:参数包含在URL路径中@GET("users/{userId}")Call或@GET("users/{userId}/{type}")Call@POST(...

weixin_28966407的博客 478

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

轻松搞定Retrofit不同网络请求方式的请求参数配置,Retrofit常用注解的使用

《一》四种网络请求方式:GET : 向服务器发起数据请求,获取信息。类似于数据库的select操作,只是查询,不会影响资源的内容。POST : 向服务器发送数据,该请求会改变数据的种类等资源。类似于数据库的insert操作,会创建新的内容。DELETE:用来删除某一个资源。类似于数据库的delete操作。PUT : 向服务器发送数据,从而改变信息。类似于数据库的update操作,用来修改内容。《二...

zj_blog的博客 1158

android Retrofit 网络请求 参数注解

对Retrofit已经使用了一点时间了,是时候归纳一下各种网络请求的service了。下面分为GET、POST、DELETE还有PUT的请求,说明@Path、@Query、@QueryMap、@Body、@Field的用法。初始化RetrofitString BASE_URL = "http://102.10.10.132/api/"; Retrofit retrofit = new Retrof...

Zophar_Development的博客 616
上一篇: Retrofit 动态修改BaseUrl
下一篇: Retrofit增加错误重连Interceptor
「已注销」
博客等级 码龄12年 5粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值