2014-07-03 78 views
1

我有一些麻煩,當我從我的App Engine應用程序收到JSON數據,某些情況下,我收到了JSON空,並在日誌查看器的我的應用程序出現在以下Java來JSON在Spring MVC對象映射導致400錯誤的請求錯誤

2014-07-03 16:46:21.193 /service/concentraciondeptos/ 400 43ms 0kb Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 module=default version=2 
181.48.97.68 - - [03/Jul/2014:14:46:21 -0700] "GET /service/concentraciondeptos/ HTTP/1.1" 400 146 - "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" "Instance ID" ms=44 cpu_ms=80 cpm_usd=0.000016 app_engine_release=1.9.6 trace_id=e2164f3bbeb2302c384164569b22b8dd 

,這裏是我的代碼

package com.servinfo.services.controller; 

import java.sql.ResultSet; 
import java.util.ArrayList; 
import java.util.List; 

import org.springframework.http.HttpStatus; 
import org.springframework.http.ResponseEntity; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.ResponseBody; 

import com.servinfo.database.Manager; 
import com.servinfo.services.AbstractController; 
import com.servinfo.services.entity.ResponseObject; 
import com.servinfo.services.entity.afe.ConcentracionDeptos; 

@Controller 
@RequestMapping("service/concentraciondeptos/*") 
public class ConcentracionDeptosController { 

    // private static final Logger log = Logger.getLogger("AreaTController"); 

    protected final static String RESPONSE_FORMAT = "application/json"; 

    private final static String GET = ""; 

    private static String STATE = ""; 

    private static String MESSAGE = ""; 


    @RequestMapping(value = GET, method = RequestMethod.GET, produces = RESPONSE_FORMAT) 
    public @ResponseBody 
    ResponseEntity<ResponseObject> getPoint() { 

     if (getData().isEmpty()) { 
      STATE = "ERROR"; 
      MESSAGE = ResponseObject.MSG_EMPTY; 
     } 

     // log.warning("Servicio areat"); 
     ResponseObject response = new ResponseObject(STATE, MESSAGE, getData()); 

     if (response.getStatus().equals("OK")) { 
      return new ResponseEntity<ResponseObject>(response, 
        AbstractController.getHeader(), HttpStatus.OK); 
     } 

     return new ResponseEntity<ResponseObject>(response, 
       AbstractController.getHeader(), HttpStatus.BAD_REQUEST); 

    } 

    public List<ConcentracionDeptos> getData() { 
     STATE = "ERROR"; 
     MESSAGE = ResponseObject.MSG_ERROR; 
     int intContador = 0; 

     List<ConcentracionDeptos> result = new ArrayList<ConcentracionDeptos>(); 
     try { 
      String sql = "select depto.coddane " 
        + "" 
        + "from departamentos as depto, proyecto as p, aporte_depto as apdepto," 
        + "aporte_muni as apomuni, ciudades as ciu" 
        + " " 
        + "where apdepto.nit = p.nit and apdepto.id_proyecto = p.id " 
        + "and apdepto.coddane_depto = depto.coddane and apomuni.nit = p.nit " 
        + "and apomuni.id_proyecto = p.id and apomuni.coddane_ciudad = ciu.coddane"; 

      Manager mng = new Manager(); 
      ResultSet rs = mng.executeQuery(sql); 
      if (rs.first()) { 
       rs.beforeFirst(); 
       STATE = "OK"; 
       MESSAGE = ResponseObject.MSG_SUCCESS; 
      } else { 
       Thread.sleep(200); 
       rs = mng.executeQuery(sql); 
       if (rs.first()) { 
        rs.beforeFirst(); 
        STATE = "OK"; 
        MESSAGE = ResponseObject.MSG_SUCCESS; 
       } else { 
        STATE = "ERROR"; 
        MESSAGE = ResponseObject.MSG_ERROR; 
       } 
      } 
      ConcentracionDeptos obEntity = new ConcentracionDeptos(); 
      while (rs.next()) { 
       intContador++; 
       obEntity.setCoddane(rs.getString("coddane")); 
      } 
      obEntity.setCantidadP(Integer.toString(intContador)); 
      result.add(obEntity); 
      rs.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return result; 
    } 
} 

當我執行mysql中檢索到正確的信息SQL命令。 這裏的連接代碼

import java.sql.*; 
import com.google.appengine.api.utils.SystemProperty; 

public class Manager { 

    public ResultSet executeQuery(String sql){ 

     try{ 
      String url = null; 
      if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) { 
       Class.forName("com.mysql.jdbc.GoogleDriver"); 
       url = "jdbc:google:mysql://ID:App ID/DB?user=root"; 
      } else { 
       Class.forName("com.mysql.jdbc.Driver"); 
       url = "jdbc:mysql://IP:3306/afe_services?user=root&password=****"; 
      } 

      Connection conn = DriverManager.getConnection(url); 
      ResultSet rs = conn.createStatement().executeQuery(sql); 
      return rs; 

     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 

我在做什麼不好?

謝謝。

+0

你可以建議,如果你可以訪問URL直接或者如果錯誤出現?你也可以放入調用url的代碼並處理響應。 – Aeseir

+0

我測試的連接,但在一些意圖連接失敗,但如果我再次嘗試連接建立正確我張貼連接代碼,並感謝您的答覆:) – user3803423

+0

你可以粘貼stacktrace? – Pracede

回答

0

編輯2:

長時間討論此問題之後是不存在的數據庫連接和會話的維護。

因此,當您調用數據庫時,它會失敗,從而導致無連接錯誤。

你需要設置你的連接像在spring.io/guides頁面描述。 網絡教程給出了獨立的數據庫連接和維護說明。

快速解釋或髒版的設置,你可以檢查出http://spring.io/guides/gs/relational-data-access/

+0

嗯,我試過,但不用其他的響應任何變化,我得到一個消息com.servinfo.services.controller.AreaTController的getData:通信鏈路故障 成功發送到服務器的最後一個數據包爲0毫秒前。驅動程序尚未收到來自服務器的任何數據包。 – user3803423

+0

因此,它與失敗的數據庫的連接。在代碼中,我沒有看到您打開並使用數據庫控制會話。 – Aeseir

+0

嗯,我不知道如何控制連接,在上面的代碼中我得到了與連接管理器的連接,但是當我使用命令「conn.Close()」時,我無法在查詢請求到數據庫後關閉連接。 );」堆棧給我下一個錯誤:「從servlet未捕獲的異常 java.lang.NullPointerException」 – user3803423

相關問題