关于springboot使用@RequestBody注解 对应的类有setter方法,的前端调用疑问
问题原因:getQueryObject拿到的有可能是null,所以set不进来呀,重写以下对应方法就好了。
@Override
public Warehouse getQueryObject() {
if(!BaseUtil.objectNotNull(super.getQueryObject())){
super.setQueryObject(new Warehouse());
}
return super.getQueryObject();
}
以下为原问题:
涉及代码如下,麻烦大佬们帮忙看一下呢
@RestController
@RequestMapping("/warehouse")
public class WarehouseController {
@Resource
private IWarehouseService service;
@RequestMapping("/queryPage")
public BaseOperationResponse<PagedResult<Warehouse>> queryPage(@RequestBody BaseOperationRequest<WarehouseQuery> req){
WarehouseQuery query = req.getRequestObject();
query = BaseUtil.objectNotNull(query) ? query : new WarehouseQuery();
BaseOperationResponse<PagedResult<Warehouse>> res = new BaseOperationResponse<>();
res.setResponseObject(service.queryPage(query));
return res;
}
}
public class BaseOperationRequest<T>
{
//请求对象
T requestObject;
public T getRequestObject() {
return requestObject;
}
public void setRequestObject(T requestObject) {
this.requestObject = requestObject;
}
public BaseOperationRequest()
{
super();
}
}
public class WarehouseQuery extends BaseQuery<Warehouse> {
public Integer getId() {
return getQueryObject().getId();
}
public void setId(Integer id) {
getQueryObject().setId(id);
}
}
import lombok.Data;
import java.io.Serializable;
@Data
public abstract class BaseQuery<T> implements Serializable {
private static final long serialVersionUID = -5156015465438433277L;
// 排序的字段名
protected String orderBy;
// 查询的页号
protected int currentPage = -1;
// 每页数量
protected int numPerPage = 10;
private T queryObject;
}
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class Warehouse implements Serializable {
private static final long serialVersionUID = -1391277377037488889L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 仓库编号
*/
private String number;
/**
* 仓库名称
*/
private String name;
/**
* 仓库级次
*/
private String level;
/**
* 父级id
*/
private Integer parentId;
/**
* 封存标志 0禁用 1启用
*/
private Boolean flag;
/**
* 备注
*/
private String remark;
}
-
这是第一种入参格式,可以调用成功:
-
这是第二种入参格式,入参就匹配不上了,请问为什么呢,我WarehouseQuery 也提供了id对应的setter方法的呢,难道必须要有字段才行吗: