如何处理 Spring data mongodb 中的 DuplicateKeyException

P.K*_*ani 4 java spring-mvc

插入数据的方法

    public  String home()  {

    try
    {
    MongoData data=new MongoData();
    data.setDate(new Date());
    data.setName("frji");

    //mongoTemplate.insert(data);
    mongoTemplate.save(data);
    }
    catch (DuplicateKeyException e) {

    }
    catch (MongoException e) {

    }
    return "home";
}
Run Code Online (Sandbox Code Playgroud)

实体类

  @Document(collection="integer_test")
public class MongoData {
    @Id
    private String id;
    private Date date;
    @Indexed(unique=true)
    private String name;
    @Override
    public String toString() {
        return "MongoData [date=" + date + ", id=" + id + "]";
    }
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}
Run Code Online (Sandbox Code Playgroud)

但它没有捕获异常。它将显示在用户界面上。那么我如何在java端捕获这个异常。

com.mongodb.MongoException$DuplicateKey: { "serverUsed" : "192.168.1.113:27017" , "ok" : 1 , "n" : 0 , "err" : "E11000 重复键错误索引: jmailer_digiengage.integer_test.$name dup key: { : \"frji\" }" , "code" : 11000} 在 com.mongodb.CommandResult.getWriteException(CommandResult.java:88) 在 com.mongodb.CommandResult.getException(CommandResult.java:79) 在com.mongodb.DBCollectionImpl.translateBulkWriteException(DBCollectionImpl.java:415)在com.mongodb.DBCollectionImpl.insertImpl(DBCollectionImpl.java:210)在com.mongodb.DBCollection.insert(DBCollection.java:176)在com.mongodb.DBCollection .insert(DBCollection.java:161) 在 com.mongodb.DBCollection.insert(DBCollection.java:107) 在 com.mongodb.DBCollection.save(DBCollection.java:1214) 在 com.mongodb.DBCollection.save(DBCollection. java:1179) 在 org.springframework.data.mongodb.core.MongoTemplate$11.doInCollection(MongoTemplate.java:1106) 在 org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:479) 在 org. springframework.data.mongodb.core.MongoTemplate.saveDBObject(MongoTemplate.java:1101) 在 org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:1034) 在 org.springframework.data.mongodb.core。 MongoTemplate.save(MongoTemplate.java:981) 在 org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:969) 在 com.mongo.test.HomeController.home(HomeController.java:62) 在太阳.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke (Method.java:498)在org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)在org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:111)在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729) 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 在 org. springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet. java:970) 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:635) 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java: 846) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:165) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 在 org. apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve. java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves .ErrorReportValve.invoke(ErrorReportValve.java:80) 位于 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) 位于 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight. java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1441) 在 org.apache .tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java :617)在org.apache.tomcat.util.threads.TaskThread $WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve. java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves .ErrorReportValve.invoke(ErrorReportValve.java:80) 位于 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) 位于 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight. java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1441) 在 org.apache .tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java :617)在org.apache.tomcat.util.threads.TaskThread $WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve. java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves .ErrorReportValve.invoke(ErrorReportValve.java:80) 位于 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) 位于 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight. java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1441) 在 org.apache .tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java :617)在org.apache.tomcat.util.threads.TaskThread $WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)运行(ThreadPoolExecutor.java:617)在org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)运行(ThreadPoolExecutor.java:617)在org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(Thread.java:745)

Meh*_*lik 8

您可以创建HandlerExceptionResolver来处理并向 UI 显示用户友好的消息。

如何创建HandlerExceptionResolver

更新:如果您只想处理异常,请写入org.springframework.dao.DuplicateKeyExceptioncatch 块。

try{
  //TODO
} catch(org.springframework.dao.DuplicateKeyException e){
 //TODO - Do what you want
}
Run Code Online (Sandbox Code Playgroud)