2016-03-31 2 views
0

Мне нужно сохранить сообщество POJO-класса в db, используя спящий режим. У меня есть этот метод в классе ManageCommunity:Преобразование Gson в Java Pojo делает значения null

public void persistCommunity(String name,String domain,String idCustomer){ 
     Session session = sessionFactory.getCurrentSession(); 
     session.beginTransaction(); 
     Community aCommunity=new Community(); 
     aCommunity.setName(name); 
     aCommunity.setDomain(domain); 
     aCommunity.setIdCustomer(idCustomer); 
     // aCommunity.setIdCommunity(aCommunity.getIdCommunity()); 
     session.save(aCommunity); 
     session.getTransaction().commit(); 
    } 

На сервлета с doPost я называю этот метод и я передать параметр JSON отправить по почтальона:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 

    Gson g = new Gson(); 
    System.out.println(CommunityHome.getBody(req)); 
    Community community = g.fromJson(CommunityHome.getBody(req), Community.class); 
    System.out.println("Community: "+community); 

    HttpSession session = req.getSession(true); 
    try { 
     ManageCommunity manageCommunity = new ManageCommunity(); 
     manageCommunity.persistCommunity(community.getName(),community.getDomain(),community.getIdCustomer()); 

    } catch (Exception e) { 

     e.printStackTrace(); 
    } 
} 

Теперь значение сообщества имеет нулевое значение, но если я вижу getBody (REQ) есть JSon

Это getBody:

private static String getBody(HttpServletRequest request) throws IOException { 

     String body = null; 
     StringBuilder stringBuilder = new StringBuilder(); 
     BufferedReader bufferedReader = null; 

     try { 
      InputStream inputStream = request.getInputStream(); 
      if (inputStream != null) { 
       bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
       char[] charBuffer = new char[128]; 
       int bytesRead = -1; 
       while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { 
        stringBuilder.append(charBuffer, 0, bytesRead); 
       } 
      } else { 
       stringBuilder.append(""); 
      } 
     } catch (IOException ex) { 
      throw ex; 
     } /*finally { 
      if (bufferedReader != null) { 
       try { 
        bufferedReader.close(); 
       } catch (IOException ex) { 
        throw ex; 
       } 
      } 
     }*/ 

     body = stringBuilder.toString(); 
     return body; 
    } 

Это POJO класс:

public class Community{ 
    public Community(){ 
     UUID uuid=UUID.randomUUID(); 
     String random=uuid.toString(); 
     this.idCommunity=random; 
    } 



    public String getIdCommunity() { 
     return idCommunity; 
    } 
    public void setIdCommunity(String idCommunity) { 
     this.idCommunity = idCommunity; 
    } 
    public String getIdCustomer() { 
     return idCustomer; 
    } 
    public void setIdCustomer(String idCustomer) { 
     this.idCustomer = idCustomer; 
    } 
    public String getDomain() { 
     return domain; 
    } 
    public void setDomain(String domain) { 
     this.domain = domain; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

    private String idCommunity; 
    private String idCustomer; 
    private String domain; 
    private String name; 

} 

Содержание CommunityHome.getBody(req) является:

{"idCustomer":"bb05ee35-0494-49e3-9e40-38d5dae10668", "name":"VenditaAbiti2", "domain":"Commerce2"}

+0

Ваш json неверен. Сейчас уровень корня не является Сообществом, как вы хотите. – dambros

+0

Я верю в он-лайн это правильно .. где ошибка для вас? –

+0

Ваш вопрос непонятен, сделайте свой пост более ясным – SpringLearner

ответ

2

Изменение JSON к этому:

{"IdCustomer":"bb05ee35-0494-49e3-9e40-38d5dae10668", 
    "Name":"VenditaAbiti2", 
    "Domain":"Commerce2" 
} 

Понял работать в этом небольшом примере:

String json = "{\"IdCustomer\":\"bb05ee35-0494-49e3-9e40-38d5dae10668\",\"Name\":\"VenditaAbiti2\",\"Domain\":\"Commerce2\"}"; 
     Gson g = new Gson(); 
     Community community = g.fromJson(json, Community.class); 
     System.out.println("Community:" + community.toString()); 

    } 

    class Community { 
    @SerializedName("IdCustomer") 
    private String idCustomer; 

    @SerializedName("Name") 
    private String name; 

    @SerializedName("Domain") 
    private String domain; 

    @Override 
    public String toString() { 
     return "Community [idCustomer=" + idCustomer + ", name=" + name + ", domain=" + domain + "]"; 
    } 

//getter setter 

Выход: Community:Community [IdCustomer=bb05ee35-0494-49e3-9e40-38d5dae10668, Name=VenditaAbiti2, Domain=Commerce2]


EDIT1:

Ваши имена переменных Pojo должны совпадать с ключевыми именами вашей JSon String. Значения Ключ json "IdCustomer" начинается с прописного. Ваша переменная начинается с нижнего регистра. Это не может совпадать. Но вы можете аннотация ваших переменных, как в моем ответе. Там вы можете указать явное имя ключа json .

+0

не работает для меня ... возможно, у меня есть другие ошибки –

+0

@FilomenaDelSorbo какие ошибки вы получаете? – Patrick

+0

Возможно, что-то связано с json, начинающимся с прописных букв и полей в нижнем регистре. – dambros

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