2015-06-18 42 views
1

我在我的項目中有一個clojure端點,它基本上更新了couchdb中的一個文檔。在clojure中處理uncaught_exception

(^{PUT true 
 
     Path "/{id}" 
 
     Produces ["application/json"] 
 
     Consumes ["application/json"] 
 
     ApiOperation {:value "Update" :notes ""} 
 
     } 
 
    method_name [this 
 
        ^{PathParam "id"} id 
 
        body] 
 
    (require 'com.xx.x.xx.xx.xx-response) 
 
    (let [doc (json/read-json body)] 
 
     (if-let [valid-doc (validate doc)] 
 
     (try+ 
 
      (->> 
 
      (assoc valid-doc :modificationDate (Utilities/getCurrentDate)) 
 
      (couch/update-document dbs/xx-db) 
 
      (core/ok-response)) 
 
      (catch java.io.IOException ex 
 
       (log/error "line num 197") 
 
      ) 
 
      (catch java.lang.Exception ex 
 
      (log/error "line num 200"))) 
 
)))

此端點拋出一個500捕獲的異常時,有不同之處的原因沿着文件衝突,這被在日誌文件中記錄。跟蹤重定向具有敏感信息。 我添加了一個catch塊來處理這個異常[clojure.lang.ExceptionInfo]。它沒有工作。

我該如何處理?有沒有辦法去除痕跡重定向?

Request exception uncaught_exception Status 500 Message An exception was thrown that was not handled by the application or a provider. 
clojure.lang.ExceptionInfo: throw+: {:trace-redirects ["https://abc123xyz-dev:separate settled first [email protected]/1111"], :request-time 3899, :request {:path "/sss", :protocol "https", :scheme :https, :data nil, :http-url "https://abc123xyz-dev.cloudant.com/1111", :conn-timeout 6000, :host "abc123xyz-dev.cloudant.com", :follow-redirects true, :request-method :post, :query-string nil, :save-request? true, :anchor nil, :http-req #<HttpPost POST https://abc123xyz-dev.cloudant.com/1111 HTTP/1.1>, :as :json, :uri "/1111", :port -1, :username "abc123xyz-dev", :data-length nil, :server-name "abc123xyz-dev.cloudant.com", :headers {"authorization" "Basic bGl2ZW1vY2hhLWRldjpzZXXBhcmF0ZSBzZXR0bGVkI1ZpcnN0IGRlY111Ww=", "accept-encoding" "gzip, deflate", "content-type" "application/json", "user-agent" "com.ashafa.clutch/0.3.0", "accept" "*/*"}, :socket-timeout 6000, :body-type nil, :server-port nil, :query nil, :password "[email protected]"}, :status 400, :headers {"server" "CouchDB/1.0.2 (Erlang OTP/R14B)", "strict-transport-security" "max-age=31536000", "x-couch-request-id" "119df05d59", "content-type" "text/plain;charset=utf-8", "date" "Thu, 18 Jun 2015 17:46:08 GMT", "cache-control" "must-revalidate", "x-content-type-options" "nosniff;", "content-length" "54", "connection" "close"}, :body "{\"error\":\"bad_request\",\"reason\":\"invalid UTF-8 JSON\"}\n"} 

更新:道歉。即使在發佈有效的json進行更新時也會發生此錯誤。對不起,如果這是誤導。

  • 感謝

回答

0

看起來你需要你的try塊是,如果你想趕上讀取或驗證JSON時拋出的異常得更高。

0

try+ 

呼叫應該來的

read-json 

函數調用之前。

所以:

 (^{PUT true 
      Path "/{id}" 
      Produces ["application/json"] 
      Consumes ["application/json"] 
      ApiOperation {:value "Update" :notes ""} 
      } 
      method_name [this 
          ^{PathParam "id"} id 
          body] 
      (require 'com.xx.x.xx.xx.xx-response) 
      (try+ 
      (let [doc (json/read-json body)] 
      (if-let [valid-doc (validate doc)] 
       (->> 
       (assoc valid-doc :modificationDate (Utilities/getCurrentDate)) 
       (couch/update-document dbs/xx-db) 
       (core/ok-response)) 
       )) 

      (catch java.io.IOException ex 
        (log/error "line num 197") 
       ) 
       (catch java.lang.Exception ex 
        (log/error "line num 200"))))