2 варианта:
- Если ваш
GetPolicyByDateRequest
не имеет примитивного атрибута , они должны быть вставлены Spring в ваш объект. Если ваш параметр не установлен (т. Е. В вашем URL нет pageSize
), тогда Spring добавляет в ваш атрибут NULL.
public class GetPolicyByDateRequest {
private String date;
private int toPage;
private int fromPage;
private Integer pageSize;
private Integer id;
public GetPolicyByDateRequest() {
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public int getToPage() {
return toPage;
}
public void setToPage(int toPage) {
this.toPage = toPage;
}
public int getFromPage() {
return fromPage;
}
public void setFromPage(int fromPage) {
this.fromPage = fromPage;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Override
public String toString() {
return "MyRequest{" +
"date='" + date + '\'' +
", toPage=" + toPage +
", fromPage=" + fromPage +
", pageSize=" + pageSize +
", id=" + id +
'}';
}
}
Странно, я думаю, что это какой-то король ошибки в Spring даже при использовании Optional
вы получите пустой объект, если параметр в requestParam не указан.
Если вы хотите получить все параметры, вам нужно использовать
@PathVariable
с
@RequestParam
в вашем случае. Вот как получить ваши параметры:
@RequestMapping(value = "/time/{date}/to/{toPage}/from/{fromPage}", method = RequestMethod.GET)
public RunCollection getPolicyByDate(@PathVariable String date, @PathVariable int toPage, @PathVariable int fromPage, @RequestParam(required = false) Optional<Integer> pageSize, @RequestParam(required = false) Optional<Integer> id) {
// then use your parameters the way you to use then.
}
Обратите внимание:
@PathVariable
извлекает параметр в URL, где значение находится в пределах {}
Например, {date}
-> @PathVariable String date
@RequestParam
извлекает параметр после ?
в URL. ?pageSize=10
-> @RequestParam int pageSize
. - Обе эти аннотации принимают в качестве параметров, среди прочего,
required=true|false
. Когда вы помечаете параметр как необязательный, убедитесь, что вы не используете примитивный тип, например, int, в противном случае вы можете установить значение null для этого объекта, и ваш код потерпит неудачу во время выполнения. Это причина, почему я использовал Optional<Integer>
, чтобы разрешить тип. Но Spring умный, и если он обнаруживает Optional
в вашем параметре, то вы вынуждены использовать required=false
в @RequestParam
.
Если вы хотите заполнить ваш GetPolicyByDateRequest
, тогда вы должны были сделать отображение POST
и использовать аннотацию @RequestBody GetPolicyByDateRequest request
и отправить тело JSON в своем запросе, чтобы Spring (фактически Джексон) преобразовал ваш JSON в GetPolicyByDateRequest
объект.
Надеюсь, это поможет