2016-03-31 8 views
0

私は、休止状態を使用してDBにPOJOクラスのコミュニティを永続化する必要があります。 、コミュニティの値がnullである今Java PojoへのGson変換によって値がNULLになる

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(); 
    } 
} 

:郵便配達で送る私は、このメソッドを呼び出すと、私はJSONのパラメータを渡すのdoPostとサーブレットで

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(); 
    } 

:私は、クラスManageCommunityでこのメソッドを持っていますしかし、私は、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; 
    } 
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" 
} 

は、この小さな例で働いて、それを手に入れた:

を0これはPOJOクラスです
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文字列のキー名と一致する必要があります。意味jsonキー"IdCustomer"は大文字で始まります。変数は小文字で始まります。これは一致しません。 しかし、にはの注釈を付けることができます。そこで、のjsonキーの明示的な名前を指定することができます。

+0

は私のために働いていません...多分私は他のエラーがあります –

+0

@FilomenaDelSorboどのようなエラーがありますか? – Patrick

+0

大文字と小文字を開始するjsonとおそらく関係します。 – dambros

関連する問題