我想从Grails应用中的IP地址检索地理位置。
我尝试hostip和geoip都提出异常并且对我不起作用。有没有其他方法可以获得地理位置?
当我使用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
答案 0 :(得分:2)
从github下载样本grails应用程序后,经过一段时间的调试后,我发现了问题所在。嗯,确实存在两个问题:
如果你看一下插件的文档:http://grails.org/plugin/geoip,你会看到它讨论了geoip.data.cache
的配置,如下所示:
geoip.data.cache - There are 4 possible values for this: 0 - GEOIP_STANDARD 1 - GEOIP_MEMORY_CACHE 2 - GEOIP_CHECK_CACHE 4 - GEOIP_INDEX_CACHE
所以它实际上寻找的是整数值,而不是它们旁边的字符串。例如,0用于GEOIP_STANDARD,因此您可以使用:
进行配置geoip.data.cache=0
当我将示例应用程序的配置更改为上述内容时,我不再获得例外情况。