如何写一个REST?
@Controller
@RequestMapping(CbtMarketHelper.PLUGIN_ID)
public class MarketConditionsBondQueryRest extends GenericRest {
private static final TsLogger logger = TsLogger.getLogger(MarketConditionsBondQueryRest.class);
protected static Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
@Note(note = "行情筛选条件债券列表查询")
@RequestMapping(value = "/marketConditionsBondGet", method = { RequestMethod.POST })
@ResponseBody
public SimpleMessage<?> marketConditionsBondGet(HttpServletRequest req, HttpServletResponse rep,
@RequestBody String json) {
// 筛选条件:债劵代码/待偿期/债劵类型/发行时间/到期时间/币种,发行人/发行人是否上市/发行人行业/发行人性质,评级/票面/含权/永续债/特殊
try {
logger.info("进入市场行情筛选条件进行查询方法, 参数{}", json);
String userCd = String.valueOf(req.getAttribute(UserLoginParam.USER_CODE.param()));
MarketConditionsBondQueryDTO param = gson.fromJson(json, MarketConditionsBondQueryDTO.class);
logger.info("用户{}筛选条件查询参数为:\n{}", userCd, prettyGson.toJson(param));
List<MarketBondVo> bondList = CbtMarketContext.get().getMarketConditionsBondQueryApi()
.marketConditionsBondGet(param.toMarketConditionsBondQueryReq(userCd));
if (bondList != null && bondList.size() > 20) {
// 不要脑子抽风了把所有信息都打印到日志中,这样性能无论如何都无法提高,因为这个结果很可能是几万个
logger.debug("查询结果,债劵列表{}", prettyGson.toJson(bondList.subList(0, 20)));
} else {
logger.debug("查询结果,债劵列表{}", prettyGson.toJson(bondList));
}
return SimpleMessage.ok().set("bondList", bondList);
} catch (GenericTsRuntimeException e) {
logger.error("行情筛选条件债券列表,查询异常", (Supervise)e);
return SimpleMessage.error(e.getErrorInfo(req)).repCode(e.getErrorCode());
} catch (Exception e) {
logger.error("行情筛选条件债券列表,查询异常", e);
return SimpleMessage.error("情筛选条件债券列表时发生系统内部查询异常").set("bondList", new ArrayList<>());
}
}
}
如何写一个Thin Service For Query & Write ?
/**
* 行情复杂筛选条件保存服务
*
* @author pluto
*
*/
public class MarketConditonServiceImpl implements MarketConditonService {
private static final TsLogger logger = TsLogger.getLogger(MarketConditonServiceImpl.class);
String deleteSql = "DELETE FROM " + CbtMarketHelper.CBT_MKT_INFO_FLTR_DTL
+ " WHERE USR_CD = ? AND CSTM_FLTR_NM = ? ";
String insertSql = " INSERT INTO " + CbtMarketHelper.CBT_MKT_INFO_FLTR_DTL
+ " (SR_NO_ID, USR_CD, CSTM_FLTR_NM, TMPLT_NO, WDGT_ID, QTS_FLTR_VL, DATA_SRC, CRTR, CRT_TM, UPDTR, UPD_TM ) VALUES ("
+ CbtMarketHelper.SEQUENCE_CBT_MKT_INFO_FLTR_DTL + ".NEXTVAL,?,?,?,?,?,?,?,?,?,?) ";
String querySql = " SELECT QTS_FLTR_VL,CSTM_FLTR_NM FROM " + CbtMarketHelper.CBT_MKT_INFO_FLTR_DTL
+ " WHERE USR_CD = ? AND TMPLT_NO = ? ";
String queryListSql = " SELECT QTS_FLTR_VL,CSTM_FLTR_NM,TMPLT_NO FROM " + CbtMarketHelper.CBT_MKT_INFO_FLTR_DTL
+ " WHERE USR_CD = ? ";
String updateSql = " UPDATE " + CbtMarketHelper.CBT_MKT_INFO_FLTR_DTL
+ " SET QTS_FLTR_VL = ? WHERE USR_CD = ? AND CSTM_FLTR_NM = ? ";
/**
* 筛选条件查询
*
* @param param
*/
@Override
public List<MarketConditionVO> queryInfoGet(String userCode, MarketConditionsSaveDTO param) {
Object[] args = new Object[] { userCode, param.getUserScreenConditionsSet() };
LobHandler lobHandler = new DefaultLobHandler();
List<MarketConditionVO> list = TsJdbcSingletonProvider.get()
.getTsJdbcTemplateByTable(CbtMarketHelper.PLUGIN_ID, CbtMarketHelper.CBT_MKT_INFO_FLTR_DTL)
.query(querySql, args, new RowMapper<MarketConditionVO>() {
@Override
public MarketConditionVO mapRow(ResultSet rs, int rowNum) throws SQLException {
try {
MarketConditionVO obj = new MarketConditionVO(userCode);
String condition = lobHandler.getClobAsString(rs, "QTS_FLTR_VL");
String conditionName = rs.getString("CSTM_FLTR_NM");
obj.setTemplateId(param.getTemplateNumber());// 模板号,由后台生成
obj.setConditionName(conditionName);// 用户定义的筛选条件名称
obj.setQueryCondition(condition);// 用户的筛选条件
return obj;
} catch (Exception e) {
logger.error("行情筛选条件查询MarketConditionVO转换时发生异常", e);
return null;
}
}
});
if (list == null) {
list = new ArrayList<>();
}
logger.info("用户{}针对模板{}的行情筛选条件值查询的结果{}", userCode, param.getTemplateNumber(), Arrays.toString(list.toArray()));
return list;
}
/**
* 筛选条件列表查询
*
* @param param
*/
@Override
public List<MarketConditionVO> queryInfoGetList(String userCode, MarketConditionsSaveDTO param) {
Object[] args = new Object[] { userCode };
LobHandler lobHandler = new DefaultLobHandler();
List<MarketConditionVO> list = TsJdbcSingletonProvider.get()
.getTsJdbcTemplateByTable(CbtMarketHelper.PLUGIN_ID, CbtMarketHelper.CBT_MKT_INFO_FLTR_DTL)
.query(queryListSql, args, new RowMapper<MarketConditionVO>() {
@Override
public MarketConditionVO mapRow(ResultSet rs, int rowNum) throws SQLException {
try {
MarketConditionVO obj = new MarketConditionVO(userCode);
String condition = lobHandler.getClobAsString(rs, "QTS_FLTR_VL");
String conditionName = rs.getString("CSTM_FLTR_NM");
String templateId = rs.getString("TMPLT_NO");
obj.setTemplateId(templateId);// 模板号,由后台生成
obj.setConditionName(conditionName);// 用户定义的筛选条件名称
obj.setQueryCondition(condition);// 用户的筛选条件
return obj;
} catch (Exception e) {
logger.error("行情筛选条件查询MarketConditionVO转换时发生异常", e);
return null;
}
}
});
if (list == null) {
list = new ArrayList<>();
}
logger.info("用户{}针对模板{}的行情筛选条件值查询的结果{}", userCode, param.getTemplateNumber(), Arrays.toString(list.toArray()));
return list;
}
/**
* 筛选条件删除
*
* @param param
*/
@Override
public void queryInfoDelete(String userCode, MarketConditionsSaveDTO param) {
try {
Object[] args = new Object[] { userCode, param.getUserScreenConditionsSet() };
// 保存前,删除记录
TsJdbcSingletonProvider.get()
.getTsJdbcTemplateByTable(CbtMarketHelper.PLUGIN_ID, CbtMarketHelper.CBT_MKT_INFO_FLTR_DTL)
.update(deleteSql, args);
} catch (Exception e) {
logger.error("筛选条件删除时发生异常", e);
}
logger.info("用户{}针对模板{}的筛选条件进行删除", userCode, param.getUserScreenConditionsSet());
}
/**
* 筛选条件新增
*
* @param param
*/
@Override
public void queryInfoAdd(String userCode, MarketConditionsSaveDTO param) {
try {
final Timestamp now = new Timestamp(System.currentTimeMillis());
TsJdbcSingletonProvider.get()
.getTsJdbcTemplateByTable(CbtMarketHelper.PLUGIN_ID, CbtMarketHelper.CBT_MKT_INFO_FLTR_DTL)
.update(insertSql, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, userCode);
ps.setString(2, param.getUserScreenConditionsSet());
ps.setString(3, UUID.randomUUID().toString());
ps.setString(4, "-");// TODO:未来支持widgetId的记录
ps.setString(5, param.getQueryCondition());
ps.setString(6, "TBS");
ps.setString(7, "TBS-CREATER");
ps.setTimestamp(8, now);
ps.setString(9, "TBS-CREATER");
ps.setTimestamp(10, now);
}
});
} catch (Exception e) {
logger.error("筛选条件新增时发生异常", e);
}
logger.info("用户{}保存自定义模板{}的筛选条件", userCode, param.getUserScreenConditionsSet());
}
/**
* 筛选条件更新
*
* @param param
*/
@Override
public void queryInfoUpdate(String userCode, MarketConditionsSaveDTO param) {
LobHandler lobHandler = new DefaultLobHandler();
try {
TsJdbcSingletonProvider.get()
.getTsJdbcTemplateByTable(CbtMarketHelper.PLUGIN_ID, CbtMarketHelper.CBT_MKT_INFO_FLTR_DTL)
.update(updateSql, new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
@Override
protected void setValues(PreparedStatement ps, LobCreator lobCreator)
throws SQLException, DataAccessException {
lobCreator.setClobAsString(ps, 1, param.getQueryCondition());
ps.setString(2, userCode);
ps.setString(3, param.getUserScreenConditionsSet());
}
});
} catch (Exception e) {
logger.error("筛选条件更新时发生异常", e);
}
logger.info("用户{}更新自定义模板{}的筛选条件", userCode, param.getUserScreenConditionsSet());
}
/**
* 筛选条件保存
*
* @param param
*/
@Override
public void queryInfoSave(String userCode, MarketConditionsSaveDTO param) {
List<MarketConditionVO> vo = this.queryInfoGet(userCode, param);
if (vo != null && vo.size() > 0) {
this.queryInfoUpdate(userCode, param);
} else {
this.queryInfoAdd(userCode, param);
}
}
}
网友评论