【问题标题】:foreach not applicable to type 'java.lang.String'foreach 不适用于类型“java.lang.String”
【发布时间】:2021-06-13 08:54:35
【问题描述】:

我正在尝试将数据库中的列表中的项目作为行中的单个值插入。如何遍历发送的有效负载并将所有项目插入到单独的行中?我试图寻找没有运气的例子。我无法循环并在数据库中插入值。

这是有效载荷

{"labsigned":["234568","234567","2345678","2344556","12335677","2345677","234556","234545"]}

我的控制器

@RequestMapping(path = "/labreport/createrordispatched", method = RequestMethod.POST)
public ResponseEntity<?> createDispatched(@RequestBody Dispatched dispatched){
    if(labDashboardService.createDispatched(dispatched)) {
        return ResponseEntity.status(HttpStatus.CREATED).body(true);
    }

    return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(false);
}

我的服务

public boolean createDispatched(Dispatched dispatched) {
    List<Dispatched> newTickets = new ArrayList<>();

    dispatched.setCreatedBy(getCurrentUserEmail());
    dispatched.setDateCreated(System.currentTimeMillis());

    for(String labsigned:dispatched.getlabsigned()){
        Dispatched ticket = new Dispatched(
                dispatched.getCreatedBy(),
                dispatched.getDateCreated(),
                labsigned
        );
        newTickets.add(ticket);
    }
    dispatchedRepository.saveAll(newTickets);
    return true;
}

我的模特

@Entity
@Table(name = "DISPATCHED")
public class Dispatched {
    private String id;
    private String labsigned;
    private Long dateCreated;
    private String createdBy;

    public Dispatched(){}
    public Dispatched(String createdBy, Long dateCreated, String labsigned){
        this.labsigned = rorlabsigned;
        this.dateCreated = dateCreated;
        this.createdBy = createdBy;

    }
//getters and setters

给我错误的那一行

  for(String rorlabsigned:dispatched.getRorlabsigned())

我应该如何设置我的实体以接受数组?

【问题讨论】:

  • dispatched.getlabsigned() 返回labsignedDispatched 属性,它是字符串而不是可迭代对象。那里的预期类型是什么?您试图从单个 Dispatched 对象创建新工单列表,这让我感到困惑。
  • 它需要一个 Iterable 对象,因为有效负载来自 {"labsigned":["234568","234567","2345678","2344556","12335677","2345677","234556","234545"]}

标签: java


【解决方案1】:

将您的 labsigned 字段声明为 Set 或使用 String.split like:

for(String rorlabsigned : dispatched.getRorlabsigned().split(",")) { ... }

【讨论】:

    【解决方案2】:

    错误消息表明您的 getter dispatched.getRorlabsigned() 没有返回 Collection。它改为返回一个 String。您不能使用foreach 循环遍历String。我想你需要一个Set&lt;String&gt; 那里。尝试重构那部分代码。

    【讨论】:

    • 嗨@Marcus,我需要Set&lt;String&gt; 在哪里?感谢您的回复
    • private Set&lt;String&gt; labsigned; 在模型中
    • 我最终得到Basic' attribute type should not be a container
    • 尝试使用上面的@ElementCollection 注解。你可以在这里查看线程 - stackoverflow.com/questions/21059451/…
    • 给我另一个错误无法确定类型:java.util.Set, at table: BDISPATCHED, for columns: [org.hibernate.mapping.Column(labsigned)]
    猜你喜欢
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2018-09-22
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多