【问题标题】:Java to JSON Object Mapping in Spring MVC results 400 Bad request errorSpring MVC 中的 Java 到 JSON 对象映射导致 400 Bad request 错误
【发布时间】:2014-08-25 04:40:44
【问题描述】:

当我在应用程序引擎中从我的应用程序接收 json 数据时遇到了一些麻烦,在某些情况下我收到的 json 是空的,并且在我的应用程序的日志查看器中出现以下内容

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

我做错了什么?

谢谢。

【问题讨论】:

  • 您能否告知您是否可以直接访问该 URL 或者是否出现错误?您还可以输入调用 url 并处理响应的代码。
  • 我正在测试连接,但在某些情况下连接失败,但如果我再次尝试连接已正确建立,我会发布连接代码并感谢您的回复:)
  • 你能粘贴堆栈跟踪吗?
  • 我收到了 nex 消息 2014-07-04 09:35:42.404 com.servinfo.services.controller.AreaTController getData: Communications link failure 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动没有从服务器收到任何数据包。

标签: java mysql json spring


【解决方案1】:

编辑 2:

经过长时间的讨论,这里的问题是没有数据库连接和会话维护。

因此当你调用数据库时,它会失败,因此会出现无连接错误。

您需要按照spring.io/guides 页面中的说明设置连接。 网络教程给出了深入的数据库连接和维护说明。

如需快速解释或脏版本设置,您可以查看http://spring.io/guides/gs/relational-data-access/

【讨论】:

  • 好吧,我试过了,但响应没有任何变化,我收到下一条消息 com.servinfo.services.controller.AreaTController getData: Communications link failure 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动没有从服务器收到任何数据包。
  • 所以它与数据库的连接失败了。在代码中,我看不到您打开和控制与 DB 的会话。
  • 好吧,我不知道如何控制连接,在上面的代码中,我获得了与连接管理器的连接,但是当我使用对数据库的查询请求后,我无法关闭该连接命令“conn.Close();”堆栈给了我下一个错误:“来自 servlet java.lang.NullPointerException 的未捕获异常”
  • 你如何连接到你的数据库并管理会话呢?告诉我你的数据库设置
  • ]我在上面描述了这段代码,我使用了一个名为Manager的类,在方法“executeQuery”中我给出了其他类的sql语句我只是调用方法和metod建立连接并执行查询并检索所有请求的数据
猜你喜欢
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 2012-04-25
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多