簡體   English   中英

post請求用springboot json格式

[英]Post request with springboot json format

我有一個產品表,我有第二個選項表。 我無法在創建產品的同時為產品創建選項。 我試圖通過創建選項表和類別連接表來單獨創建選項。 當我以 json 格式發送選項時,它不起作用。 我收到錯誤的請求錯誤並在控制台中:

JSON 解析錯誤:無法構造com.pastrycertified.cda.dto.OptionsDto的實例(盡管至少存在一個 Creator):沒有要從 String value('pie') 反序列化的字符串參數構造函數/工廠方法; 嵌套異常是 com.fasterxml.jackson.databind.exc.MismatchedInputException:無法構造com.pastrycertified.cda.dto.OptionsDto的實例(盡管至少存在一個 Creator):沒有字符串參數構造函數/工廠方法可從字符串值反序列化('餡餅')在 [來源:(org.springframework.util.StreamUtils$NonClosingInputStream); 行:2,列:19](通過引用鏈:java.util.LinkedHashMap["typeOption"])]

謝謝你的幫助

數據

{
    "typeOption": "product",
    "ingredients": {
        "option1": "test",
        "option2":"test1"
    }
}

controller 選項

@RestController
@RequestMapping("/options")
@RequiredArgsConstructor
public class OptionsController {

    private final OptionsService optionsService;

    @PostMapping("/")
    public void save(
            @RequestBody Map<String, OptionsDto > options
    ) {
        return ResponseEntity.ok(optionsService.save(options));
    }
}

選項服務

public interface OptionsService {

    Options save(OptionsDto options);
}

optionServiceImpl

@Service
@RequiredArgsConstructor
public class OptionsServiceImpl implements OptionsService {


    @Override
    public Options save(OptionsDto options) {

        Options option = OptionsDto.toEntity(options);
        option.setTypeOption(option.getTypeOption());
        option.setIngredients(option.getIngredients());

        return option;
    }
}

選項Dto

@Getter
@Setter
@AllArgsConstructor
@Builder
public class OptionsDto {

    private Integer id;

    private String typeOption;

    private String ingredients;

    private String nameCategory;

    private CategoryDto category;

    public static OptionsDto fromEntity(Options options) {

        return OptionsDto.builder()
                .id(options.getId())
                .typeOption(options.getTypeOption())
                .ingredients(options.getIngredients())
                .nameCategory(options.getCategory().getName())
                .build();
    }

    public static Options toEntity(OptionsDto options) {

        return Options.builder()
                .id(options.getId())
                .typeOption(options.getTypeOption())
                .ingredients(options.getIngredients())
                .build();
    }
}

正如 Jens 提到的,您需要 OptionD 中的默認構造函數 class。此外,您必須確定ingredients是字符串還是 Map。

在 controller 中,您要求的是 Map<> 但您在 JSON 中傳遞的不是 map。您的 controller 必須要求 OptionsDto 而不是 Map。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM