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