我正在使用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
如果您的statut
是String
,则可以使用defaultValue
参数作为@RequestParam(value = "status", required = false, defaultValue = "")
。
但是从你的代码看起来像它是一个enum
(EStatus
)和enum
的defaultValue
必须包含一个常量表达式,可以传递给Enum.valueOf()
。如果是这种情况,即使您指定defaultValue = ""
,值仍将是null
。(显然,如果你有一个默认的enum
值,如"ALL"并使用defaultValue = "ALL"
).
否则,您将不得不在控制器或存储库方法中手动处理null
值。