[英]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.