Нулевая проверка для объекта тела запроса - PullRequest
0 голосов
/ 06 октября 2018

Можно ли сделать интеграционный тест для проверки на ноль.Я передал нулевое значение.

HttpEntity<Employee> entity = new HttpEntity<Employee>(null, headers);
restTemplate.exchange(url, httpMethod, entity, String.class);

Я получил следующую ошибку.

{"отметка времени": "2018-10-06T14: 33: 52.113 + 0000", "статус": 400, "ошибка ":" Неверный запрос "," сообщение ":" Обязательное тело запроса отсутствует: "}

@RestController
public class EmployeeController {

    @PostMapping(value = "/employee/save", produces = "application/json")
    public Employee save(@RequestBody Employee employee){
        if(employee==null){
            throw new RuntimeException("Employee is null");
        }
    }
}

class Employee {

}

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

Я не уверен, выполнимо ли это, но я скажу, что это плохая практика.

Согласно RFC 7231:

Метод POST используется для запросаИсходный сервер принимает представление, включенное в запрос, в качестве данных, которые будут обрабатываться целевым ресурсом.

Поскольку вы аннотировали свой контроллер PostMapping, тело запроса должно быть отправлено на сервер.Я не вижу значения написания интеграционного теста для пустого или пустого тела запроса.

Если мы посмотрим на структуру HTTP-запроса,

POST / your_url HTTP / 1.1
HOST your_host
ContentType ... ContentLength ...

Линия тела 1

В чем разница между нулевым и пустым?

0 голосов
/ 06 октября 2018

Вы можете использовать инфраструктуру проверки javax, чтобы проверить, является ли @requestbody нулевым или нет

, пожалуйста, используйте следующий подход: это определенно решит вашу проблему.

Maven Dependency:
   <dependency>
       <groupId>javax.validation</groupId>
       <artifactId>validation-api</artifactId>
       <version>1.1.0.Final</version>
   </dependency>

@RestController
public class EmployeeController {

     @PostMapping(value = "/employee/save", produces = "application/json")
     public Employee save(@NotNull @RequestBody Employee employee){

     }
}
0 голосов
/ 06 октября 2018
@RequestBody(required=false) Employee employee

, пожалуйста, попробуйте с необходимой опцией в @ RequestBody.

Проблема здесь заключается в отображении весной mvc.

required

Значение по умолчанию - true, приводящее к исключению, выдаваемому вдела нет содержимого тела.Установите для этого параметра значение false, если вы предпочитаете, чтобы значение null передавалось, когда содержимое тела имеет значение null.

@RequestBody Employee employee

Ваш метод обрабатывает запрос только в том случае, если сотрудник не равен NULL.Затем он правильно рассмотрел отображение и передал запрос этому методу и обработал его.Таким образом, условие проверки нуля здесь будет ненужным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...