我需要通过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
2条答案
按热度按时间qpgpyjmq1#
我看到你试图使用@RequestParam来获取param值,但你得到的param像一个@PathVariable,将注解更改为@PathVariable并重试。
我希望这个链接可以帮助你。
https://www.baeldung.com/spring-pathvariable
或者,如果你想使用@RequestParam,那么,发送你的请求如下:http://localhost:8080/service?ID=1
deikduxw2#
服务类需要这样注解。否则
@Autowired
将无法工作。解决方案
添加如下注解: