首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSON解析错误:不能反序列化`java.util.LinkedHashMap<java.lang.String、java.lang.Double>类型的值

JSON解析错误:不能反序列化`java.util.LinkedHashMap<java.lang.String、java.lang.Double>类型的值
EN

Stack Overflow用户
提问于 2022-11-14 12:17:38
回答 1查看 249关注 0票数 0

显然我有反序列化的问题。我想在数据库中插入一个新产品的列表。一开始我有个问题:

代码语言:javascript
运行
复制
"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“

代码语言:javascript
运行
复制
@Getter
@Setter
public class ProductWrapper implements Serializable {

    private static final long serialVersionUID = 1L;
    List<Product> products;   
}

第一个问题已经解决了,但我还有另一个我无法解决的问题。我在名单里用了一张地图。

代码语言:javascript
运行
复制
 "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.
代码语言:javascript
运行
复制
@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<>(); 
}
代码语言:javascript
运行
复制
@RestController
@RequestMapping("/products")
@RequiredArgsConstructor
public class ProductController {

    private ProductService productService;
    
    @PostMapping
    public void addProducts(@Valid @RequestBody ProductWrapper products) {
        productService.addProducts(products.getProducts());
    }
}
代码语言:javascript
运行
复制
public class ProductServiceImpl implements ProductService {
    
    private ProductRepository productRepository;

    @Override
    public void addProducts(List<Product> products) {
        for (Product product : products) {
            productRepository.save(product);
        }   
    }
}

这是我的求职信,贴在邮递员上:

代码语言:javascript
运行
复制
{
   "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"
                }
            ]
        }
    ]
}

预先感谢您的帮助

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74431523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档