2015-05-12 3 views
2

Мне нужно сделать POST json string, используя HttpClient. Следующим будет код, который у меня есть. С другого конца Json отображается на объект.Ошибка синтаксического анализа Java + jackson Непризнанный побег символа

HttpClient client = HttpClientBuilder.create().build(); 
HttpPost post = new HttpPost(url); 
String jsonData = "{ \"provider\" : null , \"password\" : \"a\", \"userid\" : \"mlpdemo\\mlpdemoins\" }"; 
post.setEntity(new ByteArrayEntity(  jsonData.toString().getBytes("UTF8"))); 
HttpResponse response = client.execute(post); 

Здесь все остальные правильно отображают ожидание userId. Здесь проблема связана с обратной косой чертой (mlpdemo \ mlpdemins). Я полагаю. Если я отправлю одну строку в качестве идентификатора пользователя, она будет отображаться без каких-либо проблем. Например: -

String jsonData = "{ \"provider\" : null , \"password\" : \"a\", \"userid\" : \"mlpdemoins\" }"; 

Это работает.

Но мне нужно это (mlpdemo \ mlpdemins) для отправки через POSt. Пожалуйста, помогите мне.

String jsonData = "{ \"provider\" : null , \"password\" : \"a\", \"userid\" : \"mlpdemo\\mlpdemoins\" }"; 

Это исключение, которое я получаю.

com.fasterxml.jackson.core.JsonParseException: Unrecognized character escape 'm' (code 109) 
at [Source: [email protected]; line: 1, column: 62] 
BadRequestException (0ea35150-f33a-4932-a31e-8a1048af53ad): 400 Bad Request, com.strategicgains.restexpress.serialization.DeserializationException: com.fasterxml.jackson.core.JsonParseException: Unrecognized character escape 'm' (code 109) 
at [Source: java.io.I[email protected]; line: 1, column: 62] 
    at com.strategicgains.restexpress.Request.getBodyAs(Request.java:165) 
    at com.strategicgains.restexpress.Request.getBodyAs(Request.java:181) 
+1

Попробуйте избежать обратной косой черты с одним или более обратной косой черты '\ "mlpdemo \\\ mlpdemoins \"'. Не уверен, но попробуй. Извините, если я ошибаюсь –

ответ

5

mlpdemo\mlpdemoins является недействительной строкой, которую вы не можете использовать его в формате JSON. Но вы можете легко использовать mlpdemo\\mlpdemoins.

ниже код работает для меня:

String jsonData = "{ \"provider\" : null , \"password\" : \"a\", \"userid\" : \"mlpdemo\\\\mlpdemoins\" }"; 

ObjectMapper mapper=new ObjectMapper(); 

System.out.println(mapper.readTree(jsonData)); 

Он будет производить этот вывод JSON:

{"provider":null,"password":"a","userid":"mlpdemo\\mlpdemoins"} 
4

Установите картографа

mapper.configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true); 
+0

Это должен быть принятый ответ. – Rakesh

Смежные вопросы