Java Spring boot web app给出500个内部服务器错误,而不是404找不到

Java Spring boot web app给出500个内部服务器错误,而不是404找不到,java,spring,spring-boot,exception,http-status-code-404,Java,Spring,Spring Boot,Exception,Http Status Code 404,当没有具有给定id的学生时,如何获得404错误 我的控制器: @GetMapping(“/students/{stu_id}”) 私人学生信息getInfo(@PathVariable(“stu_id”)字符串stu_id){ 学生信息学生=学生信息服务.getStudentById(学生id); 如果(学生==null){ 抛出new StudentNotFoundException(“id”+stu_id); } 留学生; } 我的例外类: @ResponseStatus(未找到Http

当没有具有给定id的学生时,如何获得404错误

我的控制器:

@GetMapping(“/students/{stu_id}”)
私人学生信息getInfo(@PathVariable(“stu_id”)字符串stu_id){
学生信息学生=学生信息服务.getStudentById(学生id);
如果(学生==null){
抛出new StudentNotFoundException(“id”+stu_id);
}
留学生;
} 
我的例外类:

@ResponseStatus(未找到HttpStatus.NOT_)
公共类StudentNotFoundException扩展RuntimeException{
public StudentNotFoundException(字符串消息){
超级(信息);
}
}
我从邮递员那里得到了什么: { “时间戳”:“2021-03-21T20:50:15.072+00:00”, “地位”:500, “错误”:“内部服务器错误”, “电文”:“, “路径”:“/学生/stud231” }

来自java的错误:

java.util.NoSuchElementException: No value present
    at java.util.Optional.get(Optional.java:135) ~[na:1.8.0_251]
    at com.example.demo.services.StudentInformationService.getStudentById(StudentInformationService.java:17) ~[classes/:na]
    at com.example.demo.controllers.AppController.getInfo(AppController.java:32) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_251]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_251]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_251]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_251]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.4.jar:5.3.4]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.4.jar:5.3.4]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.4.jar:5.3.4]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.4.jar:5.3.4]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.4.jar:5.3.4]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.4.jar:5.3.4]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.4.jar:5.3.4]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.4.jar:5.3.4]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.4.jar:5.3.4]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.4.jar:5.3.4]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.43.jar:4.0.FR]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.4.jar:5.3.4]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.43.jar:4.0.FR]
    at ...

发生这种情况的原因是,返回的可选参数为:
repository.findById(id)
可以返回一个
空的
,因此如果对其调用get(),它将抛出一个
java.util.NoSuchElementException

您可以通过以下方式解决此问题:
repository.findById(id).orElseGet(null)
repository.findById(id).orElseGet(新学生信息())

4XX错误代码与客户端错误有关,您不应将其作为最佳实践返回。您可以返回200 Ok,但响应为空


因为资源可用,但path变量的记录不存在,所以在此处返回404不是一个好选择。

您能给我们看一下服务器stacktrace吗@伊斯梅尔