我已经为REST服务器编写了Java客户端,除非将换行符添加到Json主体请求中的String上,否则它都能正常工作。如果我使用诸如Insomnia之类的客户端,则该请求与换行符完美配合。 Javascript / HTML客户端也可以在相同数据下正常工作。在下面的Json示例中,问题出在“文本”字段。如果删除“ \ n”,该代码将起作用。否则,服务器将返回错误400。
我在请求中尝试了几种不同的编码和参数。似乎没有任何作用。
Json request formated
{
"name": "Operation 101",
"idPio": "10007200000000000205",
"idGlobalPio": "5387fed1-d010-4bde-b45b-7dd5815b9e03",
"text": "Description\n1 - First line\n2 - Second Line",
}
我的Java代码
//If I just remove the "\n" from the String below the server issues the 200 code
//But the server will accept this string just as it is if sent form Insomnia, handling correctly the newlines.
String jsonBody = "{\"name\": \"Operation 101\",\"idPio\": \"10007200000000000205\",\"idGlobalPio\": \"5387fed1-d010-4bde-b45b-7dd5815b9e03\",\"text\": \"Descrition\n1 - First line\n2 - Second Line\",}";
url = new URL("https://10.120.43.23:8000/api/item/1.0/item/annotation/?t=E34B2A8A-0A64-469A-AE52-45E8A9885D70");
HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
//Add request header
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", "Java client");
con.setRequestProperty("Accept-Language", "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6");
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
con.setRequestProperty("Accept", "application/json, text/plain, */*");
con.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
con.setRequestProperty("Connection", "keep-alive");
con.setDoOutput(true);
//Prepare data and send
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
byte[] arr = jsonBody.getBytes("UTF-8");
wr.write(arr);
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
System.out.println(String.valueOf(responseCode));
答案 0 :(得分:2)
用\\\n
代替\n
代替换行符。
答案 1 :(得分:2)
请记住,不允许在JSON中的字符串内使用文字换行符。它需要表示为\n
。但是,Java字符串中的换行符也表示为\n
。例如:
类似Java的字符串
String example = "{\"test\":\"line\nbreak\"}"
将代表(JSON)字符串
{"test":"line
break"}
这是不允许的。您需要JSON字符串为:
{"test":"line\nbreak"}
在Java字符串中表示为:
String example = "{\"test\":\"line\\nbreak\"}"
// Notice the double backslash ---^^
带有外部单词:就像您必须在Java字符串中使用反斜杠转义引号("
)一样,您还需要对其他反斜杠进行转义(例如\n
中的反斜杠)。 / p>
答案 2 :(得分:0)
用 \\ n 替换换行符 \ n ,并从最后的json项中删除逗号(,)
正确的语法如下
String jsonBody = "{\"name\": \"Operation 101\",\"idPio\": \"10007200000000000205\",\"idGlobalPio\": \"5387fed1-d010-4bde-b45b-7dd5815b9e03\",\"text\": \"Descrition\\n1 - First line\\n2 - Second Line\"}";