论 spring (boot) get请求的正确姿势(多参数处理/嵌套参数处理)
最近学习spring cloud 中, 结合着项目实践, 遇到了各种有意思的问题
常规方式
如:
// 方式一
@GetMapping(value = "/{name}")
public String index(@PathVariable String name) {
return null;
}
// 方式二
// 自定义java对象处理接收体,转成json
// 方式三
// 类似post/put/patch请求, 获取请求提
// 方式四
// 借助第三方工具包
// 等等
// 以上方式为常规方式, 存在各种麻烦的处理
// 下面spring boot原生处理get
如何以更正确的姿势获取get多参数处理/嵌套参数处理
处理方式
- 这是一个接口的json返回结果
- 各种不同的查询条件,注意api最后两个查询条件,将get中对象.字段名=value, 自动解析到模型中
// api: http://127.0.0.1:8008/api/v1/client-service/activity/search?clientPage=1&everyPage=1&activity.id=1&activity.name=活动名称1 { "status": 200, "msg": "请求成功", "data": [ { "id": 5, "client_id": 1, "activity": { "id": 1, "shop_id": 1, "type": null, "name": "活动名称1", "start_date": "2019-03-21", "end_date": "2019-04-21" }, "check_type": 0, "createtime": "2019-03-11 11:08:53" } ], "pager": { "client_page": 1, "sum_page": 2, "every_page": 1 } }
实现方式(spring boot + jpa)
- 嵌套模型
/**
* des: 客户店铺活动参与
* @author dreamlu
*/
@Entity(name = "client_activity")
@Data
public class Activity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 客户id
@Column(columnDefinition = "bigint(20)")
private Long clientId;
@OneToOne
@JoinColumn(name = "activity_id")
private ActivityDe activity;
// 核销类型, 0(到店核销), 1(邮寄)
@Column(columnDefinition = "tinyint(1)")
private Integer checkType;
// 创建时间
@Column(columnDefinition = "datetime")
private Date createtime;
}
/**
* des: 活动详情
* @author dreamlu
*/
@Data
@Entity(name = "activity")
public class ActivityDe {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 店铺id
@Column(columnDefinition = "bigint(20)")
private Long shopId;
// 活动类型, 0(套餐), 1(拼团)
@Column(columnDefinition = "tinyint(1)")
private Long type;
// 活动名称
@Column(columnDefinition = "varchar(20)")
private String name;
// 开始日期
@Column(columnDefinition = "date")
private String startDate;
// 结束日期
@Column(columnDefinition = "date")
private String endDate;
}
- code
/**
* 分页搜索
* @param params 额外参数处理, 如分页, 返回所有
* @param activity 表对象模型
* @return
*/
@GetMapping("/search")
public Object search(@RequestParam(required = false) Map<String, Object> params, Activity activity) {
return service.getBySearch(params, activity);
}
更多略