Spring MVC 是否有一种方法可以在@RequestBody字段中声明一个默认值,类似于在@RequestParam中声明defaultValues?

ibrsph3r  于 2022-11-15  发布在  Spring
关注(0)|答案(3)|浏览(555)

我们有这样一个请求主体,它应该在访问端点时Map查询参数

// Uses Lombok @Data
public class RetrieveTxnRequest {

  private Short pageStart = 0;

  private Short pageSize = Short.MAX_VALUE;
}

但当我们这样调用端点时:

serverUrl/ourEndpoint?pageSize=

pageSize被设置为null。如果我们提供一个值,它就可以工作。我注意到如果我们使用@RequestParams而不是使用类,问题就不会发生:

@GetMapping("/ourEndpoint")
public OurResponse getTransactions(@RequestParam(required = false, defaultValue = "0") Short pageStart,
                                   @RequestParam(required = false, defaultValue = "50") Short pageSize)

因为设置了默认值。
我试着ff:

// Uses Lombok @Data
public class RetrieveTxnRequest {

  private Short pageStart = 0;

  @Value("50")
  private Short pageSize = Short.MAX_VALUE;
}

但是它似乎不起作用,如果我们使用上面提到的端点,pageSize仍然为null
tldr:有没有办法在Spring @RequestBody类中设置默认值?

huwehgph

huwehgph1#

使用空值=空值。SKIP

@JsonSetter(nulls = Nulls.SKIP)
private Short pageSize = 50;
mkh04yzy

mkh04yzy2#

您可以在类别中设定值,它会被视为预设值。

public class RetrieveTxnRequest {

  private Short pageStart = 0;

  private Short pageSize = "default_value";
}

另请参阅link以了解此响应

bvjveswy

bvjveswy3#

我只是试着重现你的问题,我想用这种方法你可以试着把你的默认值放在请求体类中。
我创建了一个如下所示的RequestBody类

public class RetrieveTxnRequest {

  private Short pageStart = 0;
  
  private Short pageSize = 1;

  public Short getPageStart() {
    return pageStart;
}

public void setPageStart(Short pageStart) {
    this.pageStart = pageStart;
}

public Short getPageSize() {
    return pageSize;
}

public void setPageSize(Short pageSize) {
    this.pageSize = pageSize;
}

}
并创建了一个请求处理程序方法,如下所示

@GetMapping("/ourEndpoint")
public RetrieveTxnRequest getTransactions(@RequestBody RetrieveTxnRequest rTxnRequest) {
    return rTxnRequest;
}

我试着通过 Postman 身体发送数据,每次如果数据在那里,它被忽略,否则默认数据来了。

相关问题