首页 > 解决方案 > 当数据库在 SpringBoot 中具有其真实值时,API 为字段返回 0

问题描述

对 Spring 的 API 调用为实体的courseid字段返回 0 Event,所有其他字段都返回正确的值。

EventController

@GetMapping("/events")
    Page<EventVM> getEvents(Pageable page) {
        return eventService.getEvents(page).map(EventVM::new);

    }

EventService

public Page<Event> getEvents(Pageable pageable ) {

        return eventRepository.findAll(pageable);
    }

那么如果我在邮递员中尝试这个请求,我会得到

{
            "id": 453,
            "eventname": "This is new",
            "courseid": 0,
            "date": "2021-12-12",
            "maxentrants": 12,
            "cost": 20.00,
            "eventtype": "4BBB",
            "qualifier": false,
            "info": "This is a test from react",
            "winner": null
        }

所以courseid显示为 0 而实际上它是241

为了确保我能得到这个值,我在 EventController 中做了一个简单的 getEvents,

@GetMapping("management/events")
    List<Event> getEvents() {

        return eventRepository.findAll();
    }

这将正确返回所有值 inc courseid

courseid在表中是Event表中的外键。我认为这可能是问题所在,但是当我进行简单的 getEvents 调用时它运行良好。idCourse

已编辑

 com.hoaxify.hoaxify.event.vm;

import com.hoaxify.hoaxify.event.Event;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;

@Data
@NoArgsConstructor
public class EventVM {

    private Long id;

    private String eventname;

    private long courseid;

    private String date;

    private int maxentrants;

    private BigDecimal cost;

    private String eventtype;

    private Boolean qualifier;

    private String info;

    private String winner;

    public EventVM(Event event) {
        this.setId(event.getEventid());
        this.setEventname(event.getEventname());
        this.setEventtype(event.getEventtype());
        this.setDate(event.getDate());
        this.setCost(event.getCost());
        this.setInfo(event.getInfo());
        this.setQualifier(event.getQualifier());
        this.setMaxentrants(event.getMaxentrants());
        this.setWinner(event.getWinner());
    }
}

标签: spring-boothibernate

解决方案


假设Event有一个courseid属性,那么您需要EventVM按如下方式修复构造函数:

public EventVM(Event event) {
    this.setId(event.getEventid());
    this.setEventname(event.getEventname());
    this.setEventtype(event.getEventtype());
    this.setCourseid(event.getCourseid());
    this.setDate(event.getDate());
    this.setCost(event.getCost());
    this.setInfo(event.getInfo());
    this.setQualifier(event.getQualifier());
    this.setMaxentrants(event.getMaxentrants());
    this.setWinner(event.getWinner());
}

注意添加的行this.setCourseid(event.getCourseid());


推荐阅读