首页 > 解决方案 > NoSuchElementException:不存在值

问题描述

我想通过 Id 更新表格,但是当从邮递员端应用数据时,我在我的 intleij 控制台中发现了这种类型的异常

java.util.NoSuchElementException: No value present
    at java.base/java.util.Optional.get(Optional.java:141) ~[na:na]
    at com.nilmani.onetooneunidirectional.service.OrganizationService.updateOrganization(OrganizationService.kt:43) ~[main/:na]
    at com.nilmani.onetooneunidirectional.service.OrganizationService$$FastClassBySpringCGLIB$$590e4b5.invoke(<generated>) ~[main/:na]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.12.jar:5.3.12]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689) ~[spring-aop-5.3.12.jar:5.3.12]
    at com.nilmani.onetooneunidirectional.service.OrganizationService$$EnhancerBySpringCGLIB$$1725a0e6.updateOrganization(<generated>) ~[main/:na]
    at com.nilmani.onetooneunidirectional.controller.OrganizationController.updateOrganization(OrganizationController.kt:43) ~[main/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.12.jar:5.3.12]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.12.jar:5.3.12]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.12.jar:5.3.12]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.12.jar:5.3.12]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.12.jar:5.3.12]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.12.jar:5.3.12]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.12.jar:5.3.12]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.12.jar:5.3.12]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.12.jar:5.3.12]
    at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920) ~[spring-webmvc-5.3.12.jar:5.3.12]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:684) ~[tomcat-embed-core-9.0.54.jar:4.0.FR]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.12.jar:5.3.12]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.54.jar:4.0.FR]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.54.jar:9.0.54]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.12.jar:5.3.12]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.12.jar:5.3.12]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.12.jar:5.3.12]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.12.jar:5.3.12]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.12.jar:5.3.12]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.12.jar:5.3.12]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
    at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]

组织服务.kt

package com.nilmani.onetooneunidirectional.service

import com.nilmani.onetooneunidirectional.entiry.Address
import com.nilmani.onetooneunidirectional.entiry.Organization
import com.nilmani.onetooneunidirectional.repository.AddressRepository
import com.nilmani.onetooneunidirectional.repository.OrganizationRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.ResponseEntity
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.util.*
import kotlin.reflect.jvm.internal.impl.load.kotlin.JvmType


@Service
class OrganizationService {
    @Autowired
    private lateinit var organizationRepository: OrganizationRepository
    @Autowired
    private lateinit var  addressRepository: AddressRepository

    fun updateOrganization(id:Long,organization: Organization):ResponseEntity<*>{
        if (organizationRepository.findById(id).isPresent){
            val orga:Organization = organizationRepository.findById(id).get()
            organization.name = orga.name
            organization.orgId=orga.orgId
            val address:Address = addressRepository.findById(organization.address.id).get()
            address.building = organization.address.building
            address.street =organization.address.street
            address.city = organization.address.city
            address.state = organization.address.state
            address.country = organization.address.country
            address.zipCode = organization.address.zipCode
            val saveAddress:Address = addressRepository.save(address)
            organization.address = saveAddress
            val saveOrganization:Organization = organizationRepository.save(organization)
            if (organizationRepository.findById(saveOrganization.id).isPresent)
                return  ResponseEntity.ok().body("Organization update success full")
            else
                return ResponseEntity.unprocessableEntity().body("Failed to update the specified organization")
        }else
            return ResponseEntity.unprocessableEntity().body("Specified organization Not found")
    }
}

组织控制器.kt

package com.nilmani.onetooneunidirectional.controller

import com.nilmani.onetooneunidirectional.entiry.Organization
import com.nilmani.onetooneunidirectional.repository.OrganizationRepository
import com.nilmani.onetooneunidirectional.service.OrganizationService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*

@RestController
class OrganizationController {
    @Autowired
    private lateinit var organizationService: OrganizationService
    @Autowired
    private lateinit var organizationRepository: OrganizationRepository

    @PutMapping("/organization/update/{id}")
    fun updateOrganization(@PathVariable id:Long,@RequestBody organization: Organization):ResponseEntity<*>{
        return organizationService.updateOrganization(id, organization)
    }
}

组织.kt

package com.nilmani.onetooneunidirectional.entiry

import com.fasterxml.jackson.annotation.JsonBackReference
import javax.persistence.*

@Entity
data class Organization(
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    val id:Long=-1,
    var name:String="",
    var orgId:String="",
    @JsonBackReference
    @OneToOne(targetEntity = Address::class,cascade = [CascadeType.ALL])
    var address: Address
)

地址.kt

package com.nilmani.onetooneunidirectional.entiry

import com.fasterxml.jackson.annotation.JsonManagedReference
import javax.persistence.*

@Entity
data class Address(
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    val id:Long=-1,
    var building:String="",
    var street:String="",
    var city:String="",
    var state:String="",
    var country:String="",
    var zipCode:String="",
    @JsonManagedReference
    @OneToOne(targetEntity = Organization::class,mappedBy = "address")
    val organization: Organization?=null
)

当我将调试点放在我的服务类中定义的行下方时

val address:Address = addressRepository.findById(organization.address.id).get()

当我将调试点放在控制器类中定义的行下方时,我得到了每个值,但 id 变量返回 id=-1

return organizationService.updateOrganization(id, organization)

我得到与上面相同的结果。这种类型的异常的原因是什么。我从不处理任何异常,默认情况下会发生异常处理。

标签: spring-bootkotlinjpa

解决方案


java.util.NoSuchElementException: No value present
  at java.base/java.util.Optional.get(Optional.java:141) ~[na:na]

表示您已调用 Option.get() 但值为 null。

您没有在此行之前检查 isPresent()

val address:Address = addressRepository.findById(organization.address.id).get()

推荐阅读