【问题标题】:How to .save/POST an array of values from a JSON key value pair in Java spring-boot JPAjava - 如何在Java spring-boot JPA中保存/发布来自JSON键值对的值数组
【发布时间】:2026-02-16 20:15:01
【问题描述】:

我正在尝试通过 REST .POST 将对象保存到我的数据库中,当我从前端接收 JSON 对象时,来自 json 键的值之一在数组形式中有多个值。

JSON:

{ "supportedId": [ 2, 4, 1, 18592, 18594 ], "reportSubscriptionId": 100 }

我想用“reportSubscriptionId: 100”将每个“supportedId”作为自己的 INSERT/Unique 条目保存在数据库中,就像上面的 json 对象一样。

如何遍历数组并正确保存?任何帮助将不胜感激,谢谢!

 @RequestMapping(
      method = RequestMethod.POST
      )
@ResponseBody
public ApplicationUserSubscription createAppSubscription(@RequestBody ApplicationUserSubscription appUser) {

  return applicationUserSubscriptionRepository.save(appUser);

@Repository
public interface ApplicationUserSubscriptionRepository extends 
JpaRepository<ApplicationUserSubscription, Integer>  {}

【问题讨论】:

    标签: java rest spring-boot jpa


    【解决方案1】:

    创建请求类以映射输入并通过如下处理输入请求来创建实体,

    实体:

    public class ApplicationUserSubscription {
        @Id
        private Integer supportedId;
        private Integer reportSubscriptionId;
        //constructor getter setters
    

    }

    请求:

    class ApplicationUserSubscriptionRequest {
         private List<Integer> supportedIds;
         private Integer reportSubscriptionId;
         //contructor getter setters
      }
    

    控制器:

    @RequestMapping(method = RequestMethod.POST)
    public List<ApplicationUserSubscription> createAppSubscription(@RequestBody ApplicationUserSubscriptionRequest applicationUserSubscriptionRequest) {
    List<ApplicationUserSubscription> subscriptions = applicationUserSubscriptionRequest.getSupportedIds().stream()
                   .map(ele -> new ApplicationUserSubscription(ele, applicationUserSubscriptionRequest.getReportSubscriptionId()))
                   .collect(Collectors.toList());
       return applicationUserSubscriptionRepository.saveAll(subscriptions);
    }
    

    存储库:

     @Repository
     public interface ApplicationUserSubscriptionRepository extends JpaRepository<ApplicationUserSubscription, Integer> {
    
      }
    

    希望对你有帮助。

    【讨论】:

    • 它告诉我构造函数 ApplicationUserSubscription(Integer, int) 在控制器中是未定义的。如果我确实创建了构造函数,我会在我的存储库中收到错误 - 使用名称“applicationUserSubscriptionRepository”创建 bean 时出错:init 方法的调用失败;嵌套异常是 java.lang.IllegalArgumentException:无法为方法 public abstract java.util.List com.fedex.ground.fass.shiftReportMod.repository.ApplicationUserSubscriptionRepository.saveAll(java.util.List) 创建查询!找不到 ApplicationUserSubscription 类型的属性 saveAll!
    • 我已经更新了答案。您不需要将 saveAll 方法添加到存储库。我也将类型更改为 int。它现在应该可以工作了。