diff --git a/src/controller/mod.rs b/src/controller/mod.rs
index 1ab4717468a05bb3f337a056e6d70648713189a2..e707497a3727886bf519e6a14ddfc27da373e956 100644
--- a/src/controller/mod.rs
+++ b/src/controller/mod.rs
@@ -15,6 +15,9 @@ pub fn route_stage() -> AdHoc {
                 product::delete
             ],
         )
-        .mount("/notification", routes![notification::subscribe])
+        .mount(
+                 "/notification",
+                 routes![notification::subscribe, notification::unsubscribe],
+             )
     });
 }
diff --git a/src/controller/notification.rs b/src/controller/notification.rs
index a59531dd4e4d91e25251d6a670fc189a8bdca90d..9cc0c6a7fd2b5f0e9b1da1c71187a0c97cf4bb72 100644
--- a/src/controller/notification.rs
+++ b/src/controller/notification.rs
@@ -5,6 +5,8 @@ use crate::model::subscriber::Subscriber;
 use crate::service::notification::NotificationService;
 use bambangshop::Result;
 
+use super::product;
+
 #[post("/subscribe/<product_type>", data = "<subscriber>")]
  pub fn subscribe(
      product_type: &str,
@@ -14,4 +16,12 @@ use bambangshop::Result;
          Ok(f) => Ok(Created::new("/".to_string()).body(Json::from(f))),
          Err(e) => Err(e),
      };
+ }
+
+ #[post("/unsubscribe/<product_type>?<url>")]
+ pub fn unsubscribe(product_type: &str, url: &str) -> Result<Json<Subscriber>> {
+     return match NotificationService::unsubscribe(product_type, url) {
+         Ok(f) => Ok(Json::from(f)),
+         Err(e) => Err(e),
+     };
  }
\ No newline at end of file