我这边使用的HanLp的pom依赖如下:
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.8.1</version>
</dependency>
在controller层的代码如下:
@RequestMapping(value = "/standard")
public R standardSegment(@RequestParam("text") String text,Long t){
text = text.trim();
if(text==null||"".equals(text)){
return R.error(ResultCode.PARAM_IS_BLANK);
}
// 清除历史缓存
map.clear();
map.put("info","标准分词: 含有词性标注,请参考 http://www.hankcs.com/nlp/part-of-speech-tagging.html#h2-8");
List<Term> list = hanLpSegmentService.standardSegment(text);
map.put("results",list);
return R.ok().put("data",map);
}
具体的service实现类中standardSegment(String text)的实现如下:
@Override
public List<Term> standardSegment(String text) {
return StandardTokenizer.segment(text);
}
虽然看起来没有任何问题,以为能够成功将后台的实体数据通过@RestController[放在类controller的类上面了]直接以json的形式发送给前台,结果没想到报错了,如下显示:
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
No serializer found for class com.hankcs.hanlp.corpus.tag.Nature and
no properties discovered to create BeanSerializer (to avoid exception,
disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
(through reference chain: top.tanyajun.common.utils.R["data"]->java.util.HashMap["results"]->java.util.ArrayList[0]->com.hankcs.hanlp.seg.common.Term["nature"])
从报错信息上看,是因为依赖中的一个Nature实体类没有实现序列化,Jackson不能将它转成json,我在网上找了相关的解决方法,但是还是一知半解,我尝试去自定义实体类去继承这个Nature类,结果它的构造方法是私有的,貌似看来只能反射来序列化了,但是我太笨了,搞不懂如何对它序列化,没准它还不用序列化呢…
我目前只能将这个
StandardTokenizer.segment(text)
的结果,也就是List<Term>
集合,把这个集合中的Nature对象进行通过流的方式把Nature中的name属性剥离出来,把他们封装到自己定义的一个实体类中,呈现出下面的json格式:
{
"nature": "nr",
"word": "李焕英"
}
不知道有没有大神能够帮小弟解决一下,一定感激不尽!