Scala isDefined得到None值,即使它有值



在传递JSON数组以构建sql查询时,如果列名字符的名称超过30个字符,则我将获得None作为值。这是我的建设者的功能。

import com.itfsw.query.builder.SqlQueryBuilderFactory
import org.apache.commons.lang3.math.NumberUtils
import play.api.Logger
import v1.controllers.QueryParserReq
final case class ColumnEmptyException(private val message: String = "",
private val cause: Throwable = None.orNull)
extends Exception(message, cause)
class QueryParser {
private val logger = Logger(getClass)
def parse(json: String): Option[String] = {
val sqlQueryBuilderFactory = new SqlQueryBuilderFactory
val sqlBuilder = sqlQueryBuilderFactory.builder
// build query
try {
val sqlQueryResult = sqlBuilder.build(json)
logger.info(s" conditions $sqlQueryResult")
Some(sqlQueryResult.getQuery(true))
}
catch {
case ex: Exception =>
logger.error(ex.getMessage, ex)
None
}

}
def createQuery(queryReq: QueryParserReq): Option[String] = {
val select: String = "SELECT "
val from: String = " FROM "
val where: String = " WHERE "

if (queryReq.fields.filter(k => NumberUtils.isNumber(k)).isEmpty &&
queryReq.fields.nonEmpty
) {
val builder = StringBuilder.newBuilder
builder.append(select)
builder.append(queryReq.fields.mkString(","))
builder.append(from)
builder.append(queryReq.cubeName.trim)
println(queryReq.jsCondition)

//No filters
if (queryReq.jsCondition.isEmpty) {
logger.info(s"dynamic Query is $builder")
Some(builder.toString())
}
//with filters
else {
val filters = parse(queryReq.jsCondition)
if (filters.isDefined) {
builder.append(where)
builder.append(filters.get)
logger.info(s"dynamic Query is $builder")
Some(builder.toString())
}
else {
None
}
}
}
else {
None
}

}
}

我的样本有效载荷

  1. 工作有效载荷
{
"filter": "{"condition":"AND","rules":[{"field":"hospital_id","operator":"equal","type":"number","value":"3"}]}",
"columns": [
{
"columnName": "Order_status"
}
],
"groupBy": []
}
  1. 非工作负载
{
"filter": "{"condition":"AND","rules":[{"field":"orbkn_surgery_procedures_hospital_id","operator":"equal","type":"number","value":"3"}]}",
"columns": [
{
"columnName": "Order_status"
}
],
"groupBy": [] }

并且query.JsCondition={"condition":"AND","rules":[{"field":"booking_id","operator":"equal","type":"number","value":3}]} 的值我正在使用libraryDependencies+="mysql"%"mysql连接器java"%"5.1.18"mysql连接器

这是查询生成器的maven com.itfsw/QueryBuilder插件版本的问题。我在用

libraryDependencies+="com.itfsw"%"QueryBuilder"%"1.0.2">

升级到

libraryDependencies+="com.itfsw"%"QueryBuilder"%"1.0.4">

解决了问题

最新更新