Estoy usando Spring Boot como herramienta de búsqueda y tengo un problema al pasar los valores del front-end al back-end. Entonces, tengo un campo de select que estoy usando para esta herramienta de búsqueda, se usa para una búsqueda. Tiene 3 valores (PRIVADO, PÚBLICO y TODOS). La opción PRIVADA tiene el valor PRIVADO, la opción PÚBLICA tiene el valor PÚBLICO y TODAS tiene el valor cadena vacía '' . Cuando trato de pasar la API de búsqueda con la cadena vacía, el backend no obtiene la cadena vacía pero la intercepta como nula por alguna razón. Aquí está mi código para el front-end 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> Aquí está mi 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 }) } }, Cuando paso el valor ALL, que es una cadena vacía '' , Spring Boot lo establece por defecto en null en lugar de mantener ese valor. Probablemente podría agregar un interior condicional ( if value is null ) value = ''; pero eso llevaría demasiado tiempo ya que tengo muchas herramientas de búsqueda, entonces, ¿hay alguna otra forma de hacer que tome el valor de la cadena vacía en lugar de null ? Aquí está el código de fondo:
@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 es solo un método que realiza la búsqueda, pero incluso antes de llegar a esa parte, el valor ya se ha convertido en null
Podría usar el parámetro defaultValue como en @RequestParam(value = "status", required = false, defaultValue = "") statut su estado fuera una String .
Pero a partir de su código, parece que es una enum ( EStatus ) y con enum s defaultValue tiene que contener una expresión constante que podría pasarse a Enum.valueOf() . Si ese es el caso, incluso si especifica defaultValue = "" el valor seguirá siendo null . (Obviamente, funcionaría si tuviera un valor de enum predeterminado como "ALL" y usara defaultValue = "ALL" ).
De lo contrario, tendrá que manejar el valor null manualmente en el controlador o en su método de repositorio.