将@PUT与Retrofit 2和OkHttp3结合使用

计时01

目前,我正在将Android与Retrofit 2.0.0-beta4和OkHttp3配合使用。我正在这样定义一个@PUT请求:

@Headers({
        Constants.CONTENT_TYPE_HEADER + ": " + Constants.JSON_HEADER_VAL,
        Constants.ACCEPT_HEADER + ": " + Constants.JSON_HEADER_VAL
})
@PUT(Constants.PUT_SKILL_LEVEL)
Call<EmployeeSkill> updateEmpSkillLevel(@Header(Constants.SESSION_COOKIE_NAME) String cookieValue, @Body EmployeeSkillRequest employeeSkillUpdate);

端点在这里:http:// apps:8080 / employeeSkillsService / employeeSkill这是PUT请求的日志输出:

D/OkHttp﹕ --> PUT http://apps:8080/employeeSkillsService/employeeSkill http/1.1
D/OkHttp﹕ Content-Type: application/json;charset=UTF-8
D/OkHttp﹕ Content-Length: 99
D/OkHttp﹕ Accept: application/json
D/OkHttp﹕ JSESSIONID: D147377AB60AFE499D2A1AAF7C93F7A3
D/OkHttp﹕ {"employee":{"id":63},"skill":{"isPrimary":false,"isSecondary":false,"id":3},"skillLevel":{"id":5}}
D/OkHttp﹕ --> END PUT (99-byte body)
<-- 404 Not Found http://apps:8080/employeeSkillsService/app.html (23ms)
D/OkHttp﹕ Server: Apache-Coyote/1.1
D/OkHttp﹕ X-Content-Type-Options: nosniff`D/OkHttp﹕ X-XSS-Protection: 1; mode=block`
D/OkHttp﹕ X-XSS-Protection: 1; mode=block
D/OkHttp﹕ Cache-Control: no-cache, no-store, max-age=0, must-revalidate
D/OkHttp﹕ Pragma: no-cache
D/OkHttp﹕ Expires: 0
D/OkHttp﹕ X-Frame-Options: DENY
D/OkHttp﹕ Content-Type: text/html;charset=utf-8
D/OkHttp﹕ Content-Language: en
D/OkHttp﹕ Content-Length: 1029
D/OkHttp﹕ Date: Mon, 07 Mar 2016 15:39:35 GMT
D/OkHttp﹕ OkHttp-Sent-Millis: 1457365206407
D/OkHttp﹕ OkHttp-Received-Millis: 1457365206412
D/OkHttp﹕ <html><head><title>Apache Tomcat/7.0.52 (Ubuntu) - Error report</title><style><!--H1 
{font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 
{font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 
{font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B{font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 404 - /employeeSkillsService/app.html</h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u>/employeeSkillsService/app.html</u></p><p><b>description</b> <u>The requested resource is not available.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/7.0.52 (Ubuntu)</h3></body></html>
D/OkHttp﹕ <-- END HTTP (1029-byte body)

我已经在Chrome上的Postman中验证了带有这些标头和有效负载的此端点可以多次工作。但是,当我使用Retrofit时,尽管端点在Postman中工作,我仍然收到404错误。这是代码调用:

Call<EmployeeSkill> updateEmployeeSkillCall = RetrofitApiRestClient.getApiClient().updateEmpSkillLevel(cookieValue, employeeSkillUpdate);

updateEmployeeSkillCall.enqueue(new Callback<EmployeeSkill>() {

    @Override
    public void onResponse(Call<EmployeeSkill> call, Response<EmployeeSkill> response) {
        // called when response HTTP status is "200 OK"
        if (response.isSuccess()) {
            holder.spnSkillLevel.setTag(pos);
            Toast.makeText(mContext, holder.tvSkillName.getText() + mContext.getString(R.string.skill_updated_success_text)
                + holder.spnSkillLevel.getSelectedItem().toString(), Toast.LENGTH_LONG).show();

            List<EmployeeSkill> updateEmployeeSkillsRow = EmployeeSkill.find(EmployeeSkill.class, "employee = ? and skill = ?",
                response.body().getEmployee().getId().toString(), response.body().getSkill().getId().toString());

            EmployeeSkill updatedSkill = updateEmployeeSkillsRow.get(0);
            updatedSkill.setSkillLevel(response.body().getSkillLevel());
            updatedSkill.setTimeUpdated(response.body().getSkillLevel().getTimeUpdated());
            updatedSkill.save();
        }
    }

    @Override
    public void onFailure(Call<EmployeeSkill> call, Throwable throwable) {
        Toast.makeText(mContext, holder.tvSkillName.getText() + mContext.getString(R.string.skill_update_failed_text), Toast.LENGTH_LONG).show();
    }
});

我尝试将@Body参数更改为JSON字符串,但是收到一条错误消息,指出JSON必须以数组或对象开头。在这方面的任何帮助将是有用的。如果没有此功能,如果找不到解决方案,并且我真的不希望这样做,我将被迫放弃翻新。

计时01

使用Fiddler2解决了我自己的问题。Cookie名称和值不正确。邮递员可能更宽容它的发送方式,而不是Retrofit和其他人如何发送。但是,从中学到了一些东西。感谢所有协助的人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Retrofit2 / okhttp3上传文件,上传操作始终执行两次,一次快速,另一次缓慢

来自分类Dev

Android:如何使用 okhttp3 发送带有负载参数的 PUT 请求

来自分类Dev

如何将Retrofit 2与Realm和RxJava结合

来自分类Dev

无法在Android中使用OkHttp3将JSON发布到服务器Express js

来自分类Dev

结合使用@Path和@Url参数和Retrofit2

来自分类Dev

使用 Slim Framework 和 Android Retrofit 进行 PUT

来自分类Dev

将virtualenv与Sublime Text 3和SublimeREPL结合使用

来自分类Dev

将 Webpack 与 d3、jQuery 和 Bootstrap 结合使用

来自分类Dev

使用PUT时RetroFit 2格式错误的URL

来自分类Dev

将RoboSpice与Jackson2和Spring结合使用

来自分类Dev

将RoboSpice与Jackson2和Spring结合使用

来自分类Dev

将okhttp3库与react-native一起使用(运行“ react-native run-android”的命令时引发异常)

来自分类Dev

将Amazon Ec2与S3结合使用

来自分类Dev

如何将接口声明从Retrofit更新到Retrofit 2

来自分类Dev

如何将Stetho与okhttp3一起用于网络检查?

来自分类Dev

使用Okhttp3.0和retrofit2缓存网络请求

来自分类Dev

使用Glide和okhttp3在Stetho中进行网络检查

来自分类Dev

使用OkHttp3和ReactiveX Java实施长轮询的正确方法

来自分类Dev

将Spring和Spark结合使用

来自分类Dev

将Ninject与Owin和InRequestScope结合使用

来自分类Dev

将Jekyll与Gulp和Livereload结合使用

来自分类Dev

将SqsListener与SNS和SQS结合使用

来自分类Dev

将.netrc与SourceForge和Git结合使用

来自分类Dev

将Firebase与Webpack和TypeScript结合使用

来自分类Dev

将JSON与HighCharts和AJAX结合使用

来自分类Dev

将MySQL IN()与PHP和PDO结合使用

来自分类Dev

将QueryXML与SUDS和Python结合使用

来自分类Dev

将Carrierwave和Capistrano与Rails结合使用

来自分类Dev

将管道与 *ngIf 和 Observables 结合使用

Related 相关文章

  1. 1

    使用Retrofit2 / okhttp3上传文件,上传操作始终执行两次,一次快速,另一次缓慢

  2. 2

    Android:如何使用 okhttp3 发送带有负载参数的 PUT 请求

  3. 3

    如何将Retrofit 2与Realm和RxJava结合

  4. 4

    无法在Android中使用OkHttp3将JSON发布到服务器Express js

  5. 5

    结合使用@Path和@Url参数和Retrofit2

  6. 6

    使用 Slim Framework 和 Android Retrofit 进行 PUT

  7. 7

    将virtualenv与Sublime Text 3和SublimeREPL结合使用

  8. 8

    将 Webpack 与 d3、jQuery 和 Bootstrap 结合使用

  9. 9

    使用PUT时RetroFit 2格式错误的URL

  10. 10

    将RoboSpice与Jackson2和Spring结合使用

  11. 11

    将RoboSpice与Jackson2和Spring结合使用

  12. 12

    将okhttp3库与react-native一起使用(运行“ react-native run-android”的命令时引发异常)

  13. 13

    将Amazon Ec2与S3结合使用

  14. 14

    如何将接口声明从Retrofit更新到Retrofit 2

  15. 15

    如何将Stetho与okhttp3一起用于网络检查?

  16. 16

    使用Okhttp3.0和retrofit2缓存网络请求

  17. 17

    使用Glide和okhttp3在Stetho中进行网络检查

  18. 18

    使用OkHttp3和ReactiveX Java实施长轮询的正确方法

  19. 19

    将Spring和Spark结合使用

  20. 20

    将Ninject与Owin和InRequestScope结合使用

  21. 21

    将Jekyll与Gulp和Livereload结合使用

  22. 22

    将SqsListener与SNS和SQS结合使用

  23. 23

    将.netrc与SourceForge和Git结合使用

  24. 24

    将Firebase与Webpack和TypeScript结合使用

  25. 25

    将JSON与HighCharts和AJAX结合使用

  26. 26

    将MySQL IN()与PHP和PDO结合使用

  27. 27

    将QueryXML与SUDS和Python结合使用

  28. 28

    将Carrierwave和Capistrano与Rails结合使用

  29. 29

    将管道与 *ngIf 和 Observables 结合使用

热门标签

归档