当前位置: 首页 > 知识库问答 >
问题:

ProtocolException:意外状态行:HTTP/1.1 422无法处理的实体

胡承载
2023-03-14

我正在使用Retrofit+Okhttp发出POST请求,遇到以下错误:

02-05 04:45:13.981  15972-16249/com.myapp.android D/Retrofit﹕ ---> HTTP POST http://10.0.0.4:3000/api/v1/users/1/posts
02-05 04:45:13.981  15972-16249/com.myapp.android D/Retrofit﹕ Accept: application/json
02-05 04:45:13.981  15972-16249/com.myapp.android D/Retrofit﹕ Content-Type: application/json; charset=UTF-8
02-05 04:45:13.981  15972-16249/com.myapp.android D/Retrofit﹕ Content-Length: 150
02-05 04:45:13.981  15972-16249/com.myapp.android D/Retrofit﹕ {"description":"test","image_url":"https://s3.amazonaws.com/bucket/xxx-4800-b0e0-fc206f95f158.jpeg","title":"test","price":0.0,"user_id":0}
02-05 04:45:13.981  15972-16249/com.myapp.android D/Retrofit﹕ ---> END HTTP (150-byte body)
02-05 04:45:14.001  15972-15972/com.myapp.android W/EGL_genymotion﹕ eglSurfaceAttrib not implemented
02-05 04:45:14.017  15972-16249/com.myapp.android D/Retrofit﹕ ---- ERROR http://10.0.0.4:3000/api/v1/users/1/posts
02-05 04:45:14.017  15972-16249/com.myapp.android D/Retrofit﹕ java.net.ProtocolException: Unexpected status line: HTTP/1.1 422��Unprocessable Entity
            at com.squareup.okhttp.internal.http.StatusLine.parse(StatusLine.java:73)
            at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:187)
            at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80)
            at com.squareup.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:791)
            at com.squareup.okhttp.internal.http.HttpEngine.access$200(HttpEngine.java:90)
            at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:784)
            at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:645)
            at com.squareup.okhttp.Call.getResponse(Call.java:263)
            at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:219)
            at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:192)
            at com.squareup.okhttp.Call.execute(Call.java:79)
            at retrofit.client.OkClient.execute(OkClient.java:53)
            at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:326)
            at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
            at retrofit.RestAdapter$RestHandler$1.invoke(RestAdapter.java:265)
            at retrofit.RxSupport$2.run(RxSupport.java:55)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at retrofit.Platform$Android$2$1.run(Platform.java:142)
            at java.lang.Thread.run(Thread.java:841)
02-05 04:45:14.017  15972-16249/com.myapp.android D/Retrofit﹕ ---- END ERROR

使用以下库:

compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile 'com.squareup.okhttp:okhttp:2.2.0'

我期待着类似以下内容的出现(有意测试一个422错误):

{
    "title": [
        "is too short (minimum is 6 characters)"
    ]
}
render json: @post.errors.to_json, status: :unprocessable_entity

这是合适的十六进制。

共有1个答案

壤驷文华
2023-03-14

您的服务器似乎违反了HTTP规范。状态行定义如下:

响应消息的第一行是状态行,包括协议版本、空格(SP)、状态码、另一空格、描述状态码的可能为空的文本短语,并以CRLF结尾。

status-line = HTTP-version SP status-code SP reason-phrase CRLF

从异常来看,状态代码和原因短语之间似乎有一个(或两个)非空格字符。

 类似资料:
  • 我试图在我的spring boot应用程序中实现一些自定义异常处理程序,它将能够处理自定义异常并显示批准消息和状态代码。 请帮忙。

  • 做一个简单的井字游戏。我尝试在鼠标进入时突出显示单个单元格,然后在鼠标离开时恢复正常-使用状态和内联样式来完成这一点。状态在鼠标进入时变化很好(样式也是如此),但在鼠标离开时不会恢复正常。我在这里错过了什么?

  • 这是我的同意模式 这是同意控制器获取声明 这是声明后的同意 同意html thymeleaf表单是 提交表格后。我得到这个错误 HTTP状态500-请求处理失败;嵌套异常是org.thymeleaf.exceptions.TemplateProcessing异常:异常评估SpringEL表达式:"user.providers"(提供者/createOrUpdateConentForm 组织。spr

  • 如何在SpringMVC中实现自定义http错误处理。 例如:我有一个urlhttp://localhost:8080/demo/canvas 它显示我的画布页面,但如果用户错过了网址并键入http://localhost:8080/demo/canva 它显示了Tomcat呈现的HTTP状态404。我希望它是自定义jsp页面。

  • 我正在尝试添加/更新学生,但在更新学生时,我收到一个错误。但在添加学生时,效果很好。我在更新时遇到此错误:- HTTP状态500-请求处理失败;嵌套异常是org.springframework.dao.数据完整性违反异常:无法执行语句;SQL[n/a];约束[null];嵌套异常是org.hibernate.exception.约束违反异常:无法执行语句 add-students.jsp @控制器

  • 问题内容: 我正在研究Java for Web,它提到http是无状态的。这是什么意思,以及它如何影响编程 我也在研究spring框架,它提到了一些Bean,因为它们的状态发生了变化,它们必须声明为内部Bean。那是什么意思 问题答案: HTTP(服务器与客户端之间的实际传输协议)是“无状态的”,因为它在调用之间不记忆任何内容。 通过HTTP访问的 每个 资源都是单个请求,它们之间没有线程连接。如