1

Grails アプリで IP アドレスから位置情報を取得したいと考えています。

hostipgeoipの両方で例外を発生させてみましたが、うまくいきませんでした。地理位置情報を取得する他の方法はありますか?

geoip を使用すると、次のようになります。

config.groovy:

geoip.data.resource= "/WEB-INF/GeoLiteCity.dat"
geoip.data.cache="GEOIP_STANDARD"

私のコントローラーで:

GeoIpService geoIpService

index() {
    def location = geoIpService.getLocation("85.176.52.75")
    render location.countryName + " " + location.city       
}

例外は次のとおりです。

| Error 2013-07-26 14:04:22,236 [http-bio-8090-exec-1] ERROR   
errors.GrailsExceptionResolver  - NullPointerException occurred when processing request:   [GET] /test/home/index
Stacktrace follows:
Message: null
Line | Method
->>  199 | <init>                    in java.util.StringTokenizer
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    221 | <init>                    in     ''
|    624 | getLocationwithdnsservice in com.maxmind.geoip.LookupService
|    593 | getLocation               in     ''
|     42 | getLocation . . . . . . . in org.grails.geoip.service.GeoIpService
|     12 | index                     in test.HomeController
|    195 | doFilter . . . . . . . .  in    
grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter                  in grails.plugin.cache.web.filter.AbstractFilter
|   1145 | runWorker . . . . . . . . in java.util.concurrent.ThreadPoolExecutor
|    615 | run                       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . . . . . . . . . in java.lang.Thread
4

1 に答える 1

2

サンプルの grails アプリを github からダウンロードし、しばらくデバッグした後、問題が何であるかがわかりました。さて、実際には 2 つの問題があります。

  • geoip プラグインの構成が正しくありません
  • geoip プラグインのドキュメントでは、構成が正しいように見えますが、そうではありません。

プラグインのドキュメント ( http://grails.org/plugin/geoipgeoip.data.cache ) を見ると、次のように構成について説明されていることがわかります。

geoip.data.cache - これには 4 つの可能な値があります。
0 - GEOIP_STANDARD
1 - GEOIP_MEMORY_CACHE
2 - GEOIP_CHECK_CACHE
4 - GEOIP_INDEX_CACHE

したがって、実際に探しているのは整数値であり、その横の文字列ではありません。たとえば、GEOIP_STANDARD には 0 が使用されるため、次のように構成します。

geoip.data.cache=0

サンプル アプリの構成を上記のように変更したところ、例外が発生しなくなりました。

于 2013-08-01T11:40:02.643 に答える