Spring Boot非必需的requestParams默认为null而不是空字符串



我正在使用Spring Boot作为搜索工具,我在将值从前端传递到后端时遇到问题。所以,我有一个select字段,我要用它来搜索工具,它是用来搜索的。它有3个值(PRIVATE,PUBLIC和ALL)。PRIVATE选项的值为PRIVATE, PUBLIC选项的值为PUBLIC, ALL选项的值为空字符串''。当我尝试在搜索api中传递空字符串时,后端没有得到空字符串,但由于某种原因他将其拦截为空。这是我的前端代码HTML/Vue.js

<div class="col-sm-4 col-12">
<label for="statut" class="form-label">Statut</label>
<select name="statut" class="form-select" id="statut" v-model="selectedVisibility">
<option value="PRIVATE">PRIVATE</option>
<option value="PUBLIC">PUBLIC</option>
<option value="">ALL</option>
</select>
</div>

我的JS:

async searchBy(){
{
fetch(`http://localhost:100/api/v1/questions/search?statut=${this.selectedVisibility}`, 
{headers : authHeader()})
.then(response => response.json())
.then(data =>
{  console.log(data);
this.questions = data })
}
},

当我传递一个空字符串''的ALL值时,Spring Boot默认为null,而不是保持该值。我可能会在( if value is null ) value = '';内添加一个条件,但这将花费太多的时间,因为我有很多搜索工具,所以,有没有另一种方法来使它采取空字符串的值,而不是null?下面是后端代码:

@GetMapping("/questions/search")
@CrossOrigin(origins = "http://localhost:8081")
public ResponseEntity<List<Question>> getQuestionByAtLeastOne
(
@RequestParam(value="statut",required=false) EStatus statut)
throws ResourceNotFoundException
{
List<Question> question= questionRepository.findByAtLeastOne(statut);
return ResponseEntity.ok().body(question);
}

findByAtLeastOne只是一个进行搜索的方法,但在到达那部分之前,值已经变成了null

如果您的statutString,则可以使用defaultValue参数作为@RequestParam(value = "status", required = false, defaultValue = "")

但是从你的代码看起来像它是一个enum(EStatus)和enumdefaultValue必须包含一个常量表达式,可以传递给Enum.valueOf()。如果是这种情况,即使您指定defaultValue = "",值仍将是null。(显然,如果你有一个默认的enum值,如"ALL"并使用defaultValue = "ALL").

否则,您将不得不在控制器或存储库方法中手动处理null值。

最新更新