Отсутствует параметр запроса, когда он включен в тело - PullRequest
0 голосов
/ 30 октября 2019

Я отправляю POJO, где я получаю сообщение о том, что поле не включено.

Актив POJO

public class Asset {

    private MultipartFile[] files;
    private String name;
    private String meta;

    //Constructor/Getters n Setters
}

Метод ресурсов

@PostMapping("asset")
public ResponseEntity uploadAsset(@RequestParam("asset") Asset asset) {
    System.out.println(asset);
    return new ResponseEntity(HttpStatus.ACCEPTED);
}

PostMan JSON Body

{
    "asset" : {
        "files": [
            "@/home/Downloads/1.jpeg",
            "@/home/Downloads/2.jpeg"   
        ],
        "name": "assetName",
        "meta": "assetMeta"
    }
}

PostMan JSON Response

{
    "timestamp": "2019-10-29T20:46:19.536+0000",
    "status": 400,
    "error": "Bad Request",
    "message": "Required Asset parameter 'asset' is not present",
    "path": "/asset"
}

Не знаюпонять, почему я получаю сообщение Required Asset parameter 'asset' is not present, когда оно есть в теле JSON. Есть идеи по этому поводу?

Ответы [ 4 ]

1 голос
/ 30 октября 2019

Используйте @RequestBody вместо @RequestParam

public ResponseEntity uploadAsset(@RequestBody Asset asset) {
0 голосов
/ 07 ноября 2019

Я попытался ответить @Jordans, и конечная точка была вызвана со всеми значениями, установленными на нуль: (

Проводя дополнительные исследования, я наткнулся на это утверждение https://stackoverflow.com/a/51982230/2199102 и попробовал его.

Объединяя ответ @Jordans и затем изменение аннотации, я смог получить ответ, который хотел

0 голосов
/ 30 октября 2019

RequestParam

Аннотация, которая указывает, что параметр метода должен быть привязан к параметру веб-запроса.

RequestBody

Аннотация, указывающая, что параметр метода должен быть привязан к телу веб-запроса. Тело запроса передается через HttpMessageConverter для разрешения аргумента метода в зависимости от типа содержимого запроса. По желанию, автоматическая проверка может быть применена путем аннотирования аргумента с помощью @Valid.

HttpMessageConverter

Интерфейс стратегии, который определяет конвертер, который может преобразовывать запросы и ответы HTTP и в них.

Вам нужнопроверить зависимость конвертера. потому что вы используете application / json.

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>

Q: Отсутствует параметр запроса, когда он включен в тело

A: Используйте аннотацию @RequestBody.

0 голосов
/ 30 октября 2019

Исходя из вашей полезной нагрузки, Spring ожидает объект, который выглядит следующим образом:

public class SomeClass {
    private Asset asset;
}

Измените свою полезную нагрузку так, чтобы она выглядела следующим образом:

{
    "files": [
        "@/home/Downloads/1.jpeg",
        "@/home/Downloads/2.jpeg"   
    ],
    "name": "assetName",
    "meta": "assetMeta"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...