2015-03-25 3 views
0

Я пытаюсь взять строку в качестве вклада от клиента отдыха и вернуть json с альтернативными символами. Тем не менее, некоторые символы отсутствуют в строке при возврате. На консоли все символы печатаются.REST не возвращает альтернативные символы. Некоторые символы отсутствуют

@Path("/person") 
public class PersonResource { 

    @GET 
    @Produces("application/json") 

    @Path("/{userid}") 
    public Response getJson(@PathParam("userid") String userId) { 

     return Response.ok(test(userId)).build(); 
    } 

    public String test(String userId) { 

     if (userId.length() == 0) { 
      System.out.println("Enter User name"); 
     } 
     System.out.println(userId); 
     char[] c = userId.toCharArray(); 

     userId = ""; 
     for (int i = 0; i < c.length; i=i+2) { 
      System.out.println(Character.toString(c[i]) + " " + i); 
      if ((int) c[i] > 127) { 
       return "invalid chars"; 
      } else if (c[i] % 2 == 0) { 
       userId = userId + Character.toString(c[i]); 
      } 
     } 

Запрос от клиента REST

http://localhost:8084/JSONProjectTest/api/person/HelloWorld 

и

REST Клиент возвращает Hll.json

На консоли, следующие печатные издания:

HelloWorld 
H 0 
l 2 
o 4 
o 6 
l 8 

Я попытался изменить десятичное число символов, но ничего не получается.

+1

Что вы подразумеваете под «REST returns Hll.json»? –

+0

Я имел в виду клиента REST. Попробуй свой ответ. Спасибо. – ItsZaif

ответ

3

Вы не только пропуск альтернативных символов - вы также пропуск символов которого UTF-16 код блока даже не:

if (c[i] % 2 == 0) 

Это исключает «о» (U + 006F) в два раза, поэтому вы получаете «Hll» вместо «Hlool».

Непонятно, почему у вас есть это заявление if, но похоже, что у вас его не должно быть. (Я бы также избавился от всех вызовов до Character.toString() и использовал StringBuilder вместо повторной конкатенации строк, но это другое дело.)

+0

Моя ошибка. Исправлено, и теперь оно работает. Спасибо за ответ. – ItsZaif

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