如何在android中更改HttpPost的内容类型?
对于请求,我需要将内容类型设置为application/x-www-form-urlencoded
所以我得到了这段代码:
httpclient=new DefaultHttpClient();
httppost= new HttpPost(url);
StringEntity se = new StringEntity("");
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/x-www-form-urlencoded"));
httppost.setEntity(se);
Run Code Online (Sandbox Code Playgroud)
但这并没有成功,我无法在任何地方找到解决方案.
干杯
我正在使用jackson框架在JSON和Java之间编组和解组数据.一切都运作良好,只要输入不包含任何字符,如:
对于我尝试的输入数据:
String jsonData = "{\"id\":1,\"street\":\"Straße\",\"number\":\"1c\",\"zipCode\":1111,\"city\":\"MyCity\"}";
Run Code Online (Sandbox Code Playgroud)
以及:
String jsonData = "{\"id\":1,\"street\":\"Stra\u00DFe\",\"number\":\"1c\",\"zipCode\":1111,\"city\":\"MyCity\"}";
Run Code Online (Sandbox Code Playgroud)
并且我一直得到同样的例外.
从json数据到java实体对象的映射是通过以下方式完成的:
/*
* Convert stream to data entity
*/
ObjectMapper m = new ObjectMapper();
T entity = (T) m.readValue(stringToStream(jsonData), readableClass);
Run Code Online (Sandbox Code Playgroud)
我还执行了一个json数据验证,它可以像预期的那样工作,也可以使用上面的字符.
如何处理这些数据?
更新
这些是MessageBodyReader班级的重要部分
@Override
public T readFrom(Class<T> type, Type genericType,
Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
throws IOException, WebApplicationException {
final String jsonData = getStringFromInputStream(entityStream);
System.out.println(jsonData);
InputStream isSchema = new FileInputStream(jsonSchemaFile);
String jsonSchema = getStringFromInputStream(isSchema); …Run Code Online (Sandbox Code Playgroud) 我在我的客户端使用Apache HTTP Client libs和Jackson.当我将JSON发布到服务器时,我收到错误:
org.codehaus.jackson.JsonParseException: Invalid UTF-8 middle byte 0x65
at [Source: HttpInputOverHTTP@22a4ac95; line: 1, column: 81]
Run Code Online (Sandbox Code Playgroud)
如果我没有设置任何标题invalid media type,这是有道理的.
如果我使用curl和相同的标题,服务器接受它,所以我认为服务器是正常的(只是巧合,它也使用杰克逊)
这是文件; 我只使用8位字符将其硬编码为Java文字,以避免任何其他地方发生错位
// "Stra\u00DFe" = "Straße"
static String TINY_UTF8_DOC = "[{ \"id\" : \"2\", \"fields\" : { \"subject\" : [{ \"name\" : \"subject\", \"value\" : \"Stra\u00DFe\" }] } }]";
Run Code Online (Sandbox Code Playgroud)
这是我一直在使用的代码,以及各种尝试的评论:
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost( url );
// Attempt A
// post.setEntity( new StringEntity( content ) );
// Attempt B
// post.setEntity( …Run Code Online (Sandbox Code Playgroud) 我正在使用 Spring boot mvc,并且遇到一个问题,该问题仅在我的临时计算机上重现,但在本地运行良好。
\n\n我发送以下 JSON 请求(注意“whatever”字段下的希伯来字符):
\n\n{\n "messageInitiaterId":"0542258808",\n "destinationId":"0544556543",\n "whatever":"\xd7\x9e\xd7\xa9\xd7\x94\xd7\x95",\n "pushToken":"e2eeb632-8c2c-4ad2-a163-cfeb671d1955",\n "androidVersion":"7.1.1",\n "deviceModel":"huawei nexus 6p",\n "appVersion":"1.42"\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在本地,它返回响应,一切都很好。在登台计算机上,这是返回的响应:
\n\n{\n "timestamp": 1485591099485,\n "status": 400,\n "error": "Bad Request",\n "exception": \n\n "org.springframework.http.converter.HttpMessageNotReadableException",\n "message": "Could not read document: Invalid UTF-8 middle byte 0x3f\\n at [Source: java.io.PushbackInputStream@6996e7d; line: 4, column: 17]; nested exception is com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 middle byte 0x3f\\n at [Source: java.io.PushbackInputStream@6996e7d; line: 4, column: 17]",\n "path": "/v1/IsRegistered"\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n目前使用 Postman 来重现这一点。请求的标头是:
\n\n"Content-Type":"application/json; charset=UTF-8"\nRun Code Online (Sandbox Code Playgroud)\n\n我还尝试将希伯来语添加到运行 Windows 8 的机器本身,但似乎没有什么区别。 …
我正在使用 jMeter 通过向我的测试服务器发送请求来拍摄 json。
以下请求总是失败:
{
"location": {
"latitude": "37.390737",
"longitude": "-121.973864"
},
"category": "Café & Bakeries"
}
Run Code Online (Sandbox Code Playgroud)
响应数据中的错误消息是:
Invalid UTF-8 middle byte 0x20
at [Source: org.apache.catalina.connector.CoyoteInputStream@6073ddf0; line: 6, column: 20]
Run Code Online (Sandbox Code Playgroud)
请求根本不会发送到服务器。其他请求(例如,用“Delis”等其他有效类别替换类别中的值)工作完美。
我想这是与“Café”相关的编码问题,但我不知道如何解决。任何的想法?谢谢!
我在 spring-kafka 中使用 JsonSerializer 和 JsonDeserializer 在生成消息时设置值序列化器。该消息有一个字段(orgName),其中包含一个特殊字符(德语变音)。我该如何处理这个特殊字符?我知道 JsonDeserializer 使用 jackson 并且 jackson 支持 utf-8。JsonDeserializer 因为它而抛出这个错误:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 middle byte 0x72
at [Source: [B@403d4534; line: 1, column: 128]
at [Source: [B@403d4534; line: 1, column: 116] (through reference chain: com.abc-company.kafka.JobRequest["orgName"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:388) ~[jackson-databind-2.8.5.jar:2.8.5]
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:348) ~[jackson-databind-2.8.5.jar:2.8.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1599) ~[jackson-databind-2.8.5.jar:2.8.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:359) ~[jackson-databind-2.8.5.jar:2.8.5]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148) ~[jackson-databind-2.8.5.jar:2.8.5]
at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1626) ~[jackson-databind-2.8.5.jar:2.8.5]
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1237) ~[jackson-databind-2.8.5.jar:2.8.5]
at org.springframework.kafka.support.serializer.JsonDeserializer.deserialize(JsonDeserializer.java:86) ~[spring-kafka-1.1.2.RELEASE.jar:na]
Run Code Online (Sandbox Code Playgroud) 我在 wso2esb 5.0.0 中开发了一个 REST API,当客户端发送的请求包含ã,ç或者é例如,inSequence管道上的第一个中介,引发关于 的错误时,我遇到了一些问题Invalid UTF-8 middle byte。
当我们将 HTTP 标头中的消息字符集强制为 ISO-8859-1 时,工作正常。但是我们需要使用 UTF-8。
有人已经面临这个问题,可以帮助我吗?
在堆栈跟踪错误之后:
TID[-1234] [ESB] [2017-07-04 15:12:26,738] ERROR {API_LOGGER.ResourceAPI} - Could not build full log message: [com.ctc.wstx.exc.WstxLazyException] Invalid UTF-8 middle byte 0x6f (at char #143, byte #127) com.ctc.wstx.exc.WstxLazyException.throwLazily(WstxLazyException.java:45) com.ctc.wstx.sr.StreamScanner.throwLazyError(StreamScanner.java:720) com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3677) com.ctc.wstx.sr.BasicStreamReader.getText(BasicStreamReader.java:858) org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.getText(XMLStreamReaderWrapper.java:164) org.apache.axiom.om.impl.builder.StAXBuilder.createOMText(StAXBuilder.java:289) org.apache.axiom.om.impl.builder.StAXBuilder.createOMText(StAXBuilder.java:250) org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:252) org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:653) org.apache.axiom.om.impl.llom.OMElementImpl.getFirstOMChild(OMElementImpl.java:670) org.apache.axiom.om.impl.llom.OMElementImpl.getChildren(OMElementImpl.java:352) org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:553) org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875) org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555) org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875) org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555) org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875) org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvelopeImpl.java:230) org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:125) org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:113) org.apache.axiom.om.impl.llom.OMElementImpl.toString(OMElementImpl.java:988) java.lang.String.valueOf(String.java:2994) java.lang.StringBuffer.append(StringBuffer.java:265) org.apache.synapse.mediators.builtin.LogMediator.getFullLogMessage(LogMediator.java:203) org.apache.synapse.mediators.builtin.LogMediator.getLogMessage(LogMediator.java:138) org.apache.synapse.mediators.builtin.LogMediator.mediate(LogMediator.java:101) …Run Code Online (Sandbox Code Playgroud)