代码之家  ›  专栏  ›  技术社区  ›  Az Samo Da Pitam

Spring Boot JPA:使用Map<Entity,Integer>映射Entity字段导致“不支持的媒体类型”错误

  •  0
  • Az Samo Da Pitam  · 技术社区  · 1 年前

    在Spring Boot应用程序中,我有一个Drone实体,其中有一个字段“药物”,我正试图将其映射为map<药物,整数>。目标是将无人机携带的药物与其相应的数量关联起来。然而,当我试图在请求正文中使用JSON创建或更新具有此映射的无人机时,我总是会遇到“不支持的媒体类型”错误:

    2023-08-30T20:49:24.538+03:00  WARN 12444 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type 'application/json;charset=UTF-8' is not supported]
    

    以前我在药物领域使用了一个列表,它都很有效。还发布了没有地图的DroneDto<药物,整数>药物领域的工作。 这就是我在无人机实体中绘制药物图的方式:

    @ElementCollection
        @CollectionTable(name = "drones_medications_map",
                joinColumns = {@JoinColumn(name="drone_id")})
        @MapKeyJoinColumn(name = "medication_id", referencedColumnName = "id")
        @Column(name = "count")
        private Map<Medication, Integer> medications;
    

    对于帖子请求,我将DroneD传递给:

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @EqualsAndHashCode
    public class DroneDto {
        private int id;
        private String serialNumber;
        private DroneModel droneModel;
        private int weightLimit;
        private int batteryCapacity;
        private DroneState droneState;
        private Map<Medication, Integer> medications = new HashMap<>();
        private User user;
    }
    

    DroneController片段:

    @RestController
    @RequestMapping("/api/v1")
    public class DroneController {
        @Autowired
        private DroneService droneService;
    
        @PostMapping("/user/{userId}/drones/create")
        public ResponseEntity<DroneDto> saveDrone(@PathVariable("userId") int userId, @RequestBody DroneDto droneDto){
            return ResponseEntity.ok(droneService.saveDrone(droneDto, userId));
        }
    

    对于我尝试的控制器 @PostMaping(value = "/user/{userId}/drones/create" consumes=MediaType.APPLICATION_JSON_VALUE) 但还是一样。

    0 回复  |  直到 1 年前