为什么无法从HTTP请求中解析此Json?

8 浏览
0 Comments

为什么无法从HTTP请求中解析此Json?

我的代码基于SpringBoot,接收post请求,解析json数据并使用jdbc执行。

public class ETLController {
@Autowired
@Qualifier("ETLService")
private ETLServiceImpl ETLServiceImpl;
@RequestMapping(value = "/sql", method = RequestMethod.POST)
@ResponseBody
/**
 * @param sqlString 
 */    
public String identify(HttpServletRequest request) {
    //String sqlString, int maxRowNum, int maxColumnNum, int maxDuration, long startTime, String killQueryJob, int processResult
    System.out.println("request: "+request) ;
    String requestJson = request.getParameter("parametersJson");
    System.out.println("requestJson: "+requestJson) ;
    //Json parser
    JsonObject object = Json.parse(requestJson).asObject();
    //connection parameters
    String connString = object.get("connString").asString();
    String connUserName = object.get("connUserName").asString();
    String connPassWord = object.get("connPassWord").asString();
    //HQL query parameter
    String sqlString = object.get("sqlString").asString();
    int maxRowNum = object.get("maxRowNum").asInt();
    int maxColumnNum = object.get("maxColumnNum").asInt();
    int maxDuration = object.get("maxDuration").asInt();
    String sqlResult = ETLServiceImpl.executeShellScript(connString, connUserName, connPassWord, sqlString, maxRowNum, maxColumnNum, maxDuration);
    return sqlResult;
}

}

curl命令如下:

curl -H "Content-Type: application/json" -X POST  --data  '{"sqlString":"select room_id from dim.dim_room","connString":"jdbc:hive2://192.168.7.21:10001/","connUserName":"xxxx","connPassWord":"xxxx","maxRowNum":500,"maxColumnNum":10,"maxDuration":6000}' http://192.168.7.24:xxx/etl/sql

然而,当我通过curl发送post请求时,参数无法解析,requestJson始终为空。

为什么会出现这个问题,如何解决?

0
0 Comments

为什么无法从HTTP请求中解析出该Json?

问题原因:将接收到的Json作为字符串,需要将其转换为Java对象以执行进一步的任务。

解决方法:尝试使用以下代码:

public String identify(HttpServletRequest request,  String parametersJson){...}

然后使用以下代码将其转换为Java对象:

JsonObject object = Json.parse(requestJson).asObject();

谢谢!

0
0 Comments

为什么无法从HTTP请求解析出这个JSON的问题出现的原因以及解决方法

问题的原因是JSON数据在HTTP请求中无法被解析,可能是因为以下原因:

1. 在传递的JSON中,没有创建与JSON键相匹配的POJO类的成员变量。为了解决这个问题,可以创建一个POJO类,其中包含与传递的JSON中的键相匹配的成员变量。

解决方法如下:

public class ConnectionString{
    private String sqlString;
    private String connString;
    private String connUserName;
    private String connPassWord; 
    private Long maxRowNum ;
    private Long maxColumnNum;
    private Long maxDuration;
    //所有的getter和setter方法
}

2. 在方法`identify()`中进行简单的更改,直接将JSON作为Java对象接收。修改方法参数如下:

public String identify(HttpServletRequest request, ConnectionString connectionString){
    //在这里接收通过curl传递的数据
    System.out.println(connectionString.getSqlString());
    //这将打印你作为请求主体传递的值
}

3. 需要编辑传递的curl请求中的JSON数据,移除`parametersJson`键。修改后的JSON数据如下:

'{"sqlString":"select room_id from dim.dim_room","connString":"jdbc:hive2://192.168.7.21:10001/","connUserName":"xxxx","connPassWord":"xxxx","maxRowNum":500,"maxColumnNum":10,"maxDuration":6000}'

而不是

'parametersJson='{"sqlString":"select room_id from dim.dim_room","connString":"jdbc:hive2://192.168.7.21:10001/","connUserName":"xxxx","connPassWord":"xxxx","maxRowNum":500,"maxColumnNum":10,"maxDuration":6000}''

需要注意的是,Spring会自动将请求体数据转换为Java对象。Spring内部使用`jackson-databind`库的类来执行此操作。

0
0 Comments

为什么无法从HTTP请求中解析出这个JSON?

问题的原因是请求中的JSON格式错误,无法被解析。解决方法是按照正确的JSON格式进行请求。

下面是一个可以尝试的解决方法:

可以使用curl命令发送HTTP请求,并在请求中包含正确格式的JSON数据。具体命令如下:

curl -H "Content-Type: application/json" -X POST -d '{"sqlString":"select room_id from dim.dim_room","connString":"jdbc:hive2://192.168.7.21:10001/","connUserName":"magic","connPassWord":"w8spDGCJVMG3J2MWio5X","maxRowNum":500,"maxColumnNum":10,"maxDuration":6000}' http://192.168.7.24:xxx/etl/sql

在上述命令中,我们使用了curl工具发送了一个POST请求,并指定了请求头的Content-Type为application/json,表示请求体中的数据是JSON格式的。请求体中的JSON数据包含了以下字段:sqlString、connString、connUserName、connPassWord、maxRowNum、maxColumnNum和maxDuration。这些字段的具体值可以根据实际情况进行修改。

通过执行上述curl命令,我们可以发送包含正确格式的JSON数据的HTTP请求,从而解决无法解析JSON的问题。

0