Java класс Boolean не принимает ноль - PullRequest
0 голосов
/ 07 января 2019

Я работаю над реагирующим приложением с бэкэндом Java 8. Я пытаюсь экспортировать отфильтрованную таблицу в файл CSV. Я был в состоянии успешно экспортировать таблицу, которая фильтруется только массивом строк или строк с одним значением. У меня возникли проблемы с включением фильтров, которые являются булевыми, НО ТОЛЬКО, когда эти фильтры не установлены. Если пользователю не нужно фильтровать таблицу по логическому столбцу, значение для этого поля фильтра равно undefined. Значение undefined не может быть передано через запрос веб-службы. Чтобы справиться с этим, у меня есть троичный оператор, установленный так:

Boolean === undefined ? null : BooleanValue

Однако я получаю нулевые ошибки

Failed to bind request element: org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Boolean'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [null]

Я предполагаю по ссылке на java.lang.string, что null передается как строковое значение, однако, когда я пытаюсь учесть это в моем контроллере веб-сервиса, происходит сбой, прежде чем я могу увидеть и отладить значение.

ПРИМЕЧАНИЕ. Я использую класс Boolean, а не тип boolean примитивного типа (нижний регистр). Насколько я понимаю, класс Boolean должен иметь значение null, но здесь это не так. Есть ли способ сделать это?

Реакция (Получить значения, которые фильтруются, если фильтр не установлен, заменить undefined на null):

  webservice.Loans.dashboard.filteredCSV(
  LoanTable.status,
  LoanTable.engineerEmail,
  LoanTable.issues === undefined ? null : LoanTable.issues).then(/*Do Stuff*/)

контроллер веб-сервиса (отладчик не сможет зайти так далеко, если value = null, но будет, если value = true или false "):

@RequestMapping(value = "/filteredCSV.json")
@ResponseBody
public WebserviceResponse<?>filteredCSV(
    @RequestParam(value="status") ArrayList status,                             
    @RequestParam(value="engineerEmail") ArrayList engineerEmail,
    @RequestParam(value="issues") Boolean issues){

   if(issues.equals("null")){
        issues = new Boolean(null);
    }

return service.filteredCSV(status, engineerEmail, issues);
} 

Есть ли способ справиться с этим?

1 Ответ

0 голосов
/ 07 января 2019

Установите для required значение false, тогда параметр issues будет иметь значение null.

@RequestMapping(value = "/filteredCSV.json")
@ResponseBody
public WebserviceResponse<?>filteredCSV(
    @RequestParam(value="status") ArrayList status,                             
    @RequestParam(value="engineerEmail") ArrayList engineerEmail,
    @RequestParam(value="issues", required=false) Boolean issues){

     return service.filteredCSV(status, engineerEmail, issues);
} 
...