我们的大多数过滤都是使用@RequestBody完成的,这很好,因为它会自动将帖子中发送的所有字段映射到我们选择的对象。我们已经请求允许在URL中传递get和just参数。以我们想要的方式支持这些家伙是一场战斗,但最终我们做出了改变。唯一的问题是,它使它非常笨重(至少对于我的实现。)我正在寻找建议,使其更清洁,更少手动。
在:
@RequestMapping(path = "forecast/filter", method = RequestMethod.POST)
List<FinancialContractData> forcastFilter(
@RequestBody(required = false) FinancialContractData filter) {
filter = filter ?: new FinancialContractData()
List<PortfolioContractInvoiceBook> curBooks = getPortContrInvBooks(filter)
后:
@RequestMapping(path = "forecast/filter", method = [RequestMethod.POST, RequestMethod.GET])
List<FinancialContractData> forcastFilter(
@RequestParam(value = "startDt", required = false) Date startDt,
@RequestParam(value = "contractId", required = false) Integer contractId,
@RequestParam(value = "differencesOnly", required = false) boolean differencesOnly,
@RequestBody(required = false) FinancialContractData filter) {
filter = filter ?: new FinancialContractData()
filter.startDt = startDt ? new RBSDate(startDt.time).asCalendar(): filter.startDt
filter.startDt = filter.startDt ?: defaultDate
filter.contractId = contractId ?: filter.contractId
filter.differencesOnly = differencesOnly ?: filter.differencesOnly
List<PortfolioContractInvoiceBook> curBooks = getPortContrInvBooks(filter)
这个特定的SAP组只需要过滤对象上的三个属性(还有很多)。我喜欢将所有参数一般映射到对象上的属性。我倾向于对控制器的建议,以便我们所有的方法都可以免费获得。春天还有其他任何我想不到的隐藏的宝石吗?
答案 0 :(得分:0)
如果模型具有适当的setter和getter,则可以传递模型:
forcastFilter(MyRequestModel model)
答案 1 :(得分:0)
这对我来说似乎是最简单的解决方案。
@RequestMapping(path = "forecast/filter", method = [RequestMethod.POST, RequestMethod.GET])
List<FinancialContractData> forcastFilter(
@RequestBody(required = false) FinancialContractData filter, FinancialContractData paramFilter) {
filter = filter ?: paramFilter
List<PortfolioContractInvoiceBook> curBooks = getPortContrInvBooks(filter)
它仍然需要指定两个参数并选择一个参数(我优先考虑POST主体),但它非常干净,并且不会因合并数据而混乱。