显然我有反序列化的问题。我想在数据库中插入一个新产品的列表。一开始我有个问题:
"trace": "org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type
`java.util.ArrayList<com.example.resources.entities.Product>` from Object value (token `JsonToken.START_OBJECT`);
所以我创建了一个包装器"ProductWrapper“
@Getter
@Setter
public class ProductWrapper implements Serializable {
private static final long serialVersionUID = 1L;
List<Product> products;
}
第一个问题已经解决了,但我还有另一个我无法解决的问题。我在名单里用了一张地图。
"timestamp": "2022-11-14T10:45:18.453+00:00",
"status": 400,
"error": "Bad Request",
"trace": "org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.LinkedHashMap<java.lang.String,java.lang.Double>` from Array value (token `JsonToken.START_ARRAY`); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.LinkedHashMap<java.lang.String,java.lang.Double>` from Array value (token `JsonToken.START_ARRAY`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 7, column: 27] (through reference chain: com.example.resources.dto.ProductWrapperDTO[\"products\"]->java.util.ArrayList[0]->com.example.resources.entities.Product[\"dimensions\"])\r\n\tat org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:391)\r\n\tat org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:185)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:133)\r\n\tat org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\r\n\tat org.springframework.web.servlet.mvc.method.
@Entity
@Data
@NoArgsConstructor @AllArgsConstructor
@TypeDefs({@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)})
public class Product {
@Id
private String productCode;
private String name;
private float pricePerUnit;
@Type(type="jsonb")
@Column(columnDefinition = "jsonb")
private Map<String, Double> dimensions = new HashMap<>();
}
@RestController
@RequestMapping("/products")
@RequiredArgsConstructor
public class ProductController {
private ProductService productService;
@PostMapping
public void addProducts(@Valid @RequestBody ProductWrapper products) {
productService.addProducts(products.getProducts());
}
}
public class ProductServiceImpl implements ProductService {
private ProductRepository productRepository;
@Override
public void addProducts(List<Product> products) {
for (Product product : products) {
productRepository.save(product);
}
}
}
这是我的求职信,贴在邮递员上:
{
"products": [
{
"productCode": "P100",
"name": "produit 1",
"pricePerUnit": "250.99",
"dimensions": [
{
"productHeight": "55",
"productWeight": "20"
}
]
},
{
"productCode": "P101",
"name": "produit 2",
"pricePerUnit": "250.99",
"dimensions": [
{
"productHeight": "60",
"productWeight": "15"
}
]
}
]
}
预先感谢您的帮助
https://stackoverflow.com/questions/74431523
复制相似问题