java JPA findById返回null,但数据存在

axr492tv  于 2023-05-05  发布在  Java
关注(0)|答案(2)|浏览(301)

我需要通过ID返回服务信息。我已经尝试了不同的代码编写方法,但它们都导致java无法通过id看到值。
服务模式:

@Entity
@Getter
@Setter
public class Service {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private BigDecimal price;
}

售后服务:

public class ServiceService {
    @Autowired
    private ServiceRepo serviceRepo;

    public Service getById(Long id) {
        return serviceRepo.findById(id).get();
    }
}

存储库:

public interface ServiceRepo extends JpaRepository<Service, Long>, JpaSpecificationExecutor<Service> {
    Optional<Service> findById(Long id);
}

和控制器:

@Controller
public class AllServices {
    @Autowired
    private ServiceRepo serviceRepo;

    @GetMapping("/services")
    public String allServices(Model model){
        List<Service> services = serviceRepo.findAll();
        model.addAttribute("services", services);
        return "services";
    }

    @Autowired
    private ServiceService serviceService;

    @GetMapping("/services/{id}")
    public ResponseEntity<Service> getServiceById(@RequestParam(value = "id", required = false) Long id){
        try{
            Service service = serviceService.getById(id);
            return new ResponseEntity<>(service, HttpStatus.OK);
        }catch(NoSuchElementException e){
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    }
}

当涉及到所有服务时,它返回所有值,但在这里它看不到它们。

这些答案和其他许多答案都没有帮助:
JPA Repository.findById() returns null but the value is exist on db
Exception: org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'params' is not present

qpgpyjmq

qpgpyjmq1#

我看到你试图使用@RequestParam来获取param值,但你得到的param像一个@PathVariable,将注解更改为@PathVariable并重试。
我希望这个链接可以帮助你。
https://www.baeldung.com/spring-pathvariable
或者,如果你想使用@RequestParam,那么,发送你的请求如下:http://localhost:8080/service?ID=1

deikduxw

deikduxw2#

服务类需要这样注解。否则@Autowired将无法工作。

解决方案

添加如下注解:

@Service
public class ServiceService {
// ...
}

相关问题