【问题标题】:How to fix Failed to convert value of type 'java.lang.String' to required type in getMapping如何修复无法在 getMapping 中将“java.lang.String”类型的值转换为所需类型
【发布时间】:2021-06-05 10:22:14
【问题描述】:

我有两个弹簧靴实体。会议设置和会议时间。 MeetingSettings 可以有无限数量的 MeetingTimes。保存它们没有任何问题。 MeetingTimes 将 meetingName 属性作为来自 MeetingSettings 的外键。我现在要做的是按名称获取所有 MeetingTimes,但出现以下错误:

Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'com.cbc.coorporateblinddateservice.entities.dates.MeetingTime'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.lang.Long] for value 'Testtewhuete'; nested exception is java.lang.NumberFormatException: For input string: "Testtewhuete"]

据我了解,它试图将我提供的 String meetingName 转换为 Long 值的错误,但我没有将它们与 meetingName 映射,且 meetingName 在 MeetingSettings 中,数据库为字符串。那么为什么会出现这个错误呢?我找不到任何解决方案。有人可以看看我的代码吗?

MeetingSettings 实体:

@Entity
@Table(name = "meeting_settings")
@Setter
@Getter
public class MeetingsSetting implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "meeting_name", unique = true)
    private String meetingName;

    @Column(name = "meeting_url")
    private String meetingUrl;

    @Column(name = "meeting_pw")
    private String meetingPw;

    @JsonManagedReference
    @OneToMany(mappedBy = "meetingName", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<MeetingTime> meetingTime = new HashSet<>();
}

会议时间:

@Entity
@Table(name = "meeting_times")
@Getter
@Setter
public class MeetingTime implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "meeting_date")
    private String date;

    @Column(name = "start_time")
    private String startTime;

    @Column(name = "end_time")
    private String endTime;

    @JsonBackReference
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "meeting_name" , referencedColumnName = "meeting_name")
    private MeetingsSetting meetingName;
}

MeetingTimeService 我正在做的获取:

@Service
public class MeetingTimeService {

    @Autowired
    MeetingTimeRepository meetingTimeRepository;

                            public List<MeetingTime> findMeetingTimeByName(MeetingTime meetingName){
                return meetingTimeRepository.findMeetingTimeByMeetingName(meetingName);
            }
}

MeetingTimeRepository:

@Repository
public interface MeetingTimeRepository extends JpaRepository<MeetingTime, Long> {

    List<MeetingTime> findMeetingTimeByMeetingName(MeetingTime meetingName);


}

【问题讨论】:

    标签: java spring spring-boot spring-mvc


    【解决方案1】:

    我可以通过将 jpa repo 方法更改为:

    List<MeetingTime> findMeetingTimeByMeetingName_MeetingName(String meetingName);
    

    但是有人能解释一下为什么现在这样有效吗?

    做什么

    findMeetingTimeByMeetingName_MeetingName
    

    这部分有变化吗?这是 jparepo 推荐给我的

    【讨论】:

      【解决方案2】:

      不知道findMeetingTimeByMeetingName(MeetingTime meetingName)的目的是什么

      试试这个代码

       @Query("SELECT mt FROM MeetingTime mt WHERE mt.meetingName.meetingName=?1")
              List<MeetingTime> findMeetingTimeBymeetingName(String meetingName);
      

      @Query("SELECT mt FROM MeetingTime mt WHERE mt.meetingName=?1")
          List<MeetingTime> findMeetingTimeByMeetingsSetting(MeetingsSetting meetingName);
      

      【讨论】:

        猜你喜欢
        • 2019-09-05
        • 1970-01-01
        • 2021-09-02
        • 2020-07-02
        • 2017-01-28
        • 2019-08-23
        • 2019-11-05
        • 2020-09-07
        • 1970-01-01
        相关资源
        最近更新 更多