论 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多参数处理/嵌套参数处理

处理方式

/**
 * 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;
}

    /**
     * 分页搜索
     * @param params 额外参数处理, 如分页, 返回所有
     * @param activity 表对象模型
     * @return
     */
    @GetMapping("/search")
    public Object search(@RequestParam(required = false) Map<String, Object> params, Activity activity) {
        return service.getBySearch(params, activity);
    }

更多略