@PathVariable不适用于非拉丁语言

时间:2019-10-04 12:53:00

标签: java spring-mvc redirect seo

我有一个控制器方法,可以从数据库中获取帖子。

@RequestMapping(value = {"/post/{id}", "/post/{id}/{title}"}, method = RequestMethod.GET)

,数据库中的发布表如下所示:

  • id
  • 标题
  • 说明
  • sl

当我收到一个GET请求以从数据库中获取帖子时,我从数据库中获取该帖子并检查URL中的标题段是否与数据库中的段匹配,如果相同,我将显示它,并且不,我将把请求重定向到与数据库中的段相同的方法。

我尝试了以下代码

@RequestMapping(value = {"/post/{id}", "/post/{id}/{title}"}, method = RequestMethod.GET)
public String getPost(@PathVariable("id") Long id, 
        @PathVariable("title") Optional<String> title,
        Model model,
        HttpServletRequest request) {

    Optional<PostDTO> postDTO = postService.findOne(id);
    if(postDTO.isPresent()) {
        String slug = postDTO.get().getSlug();

        model.addAttribute("post", postDTO.get());

        if( (title.isPresent() && !slug.equals(title.get())) || !title.isPresent()) {
            // redirect
            return "redirect:/post/" + postDTO.get().getId() + "/" + slug;
        } else {
            return "post/index";
        }
    } else {
        return "post/not_found";
    }
}

但是当到达重定向语句时,将发送id,但标题为null,因此我遇到了无限循环。

我做错了什么?

更新:

经过一些调试后,我发现如果存储在slug变量中的文本为英语,则我的代码可以正常工作,但是如果为阿拉伯语,则为null。

return "redirect:/post/" + postDTO.get().getId() + "/" + slug;

return "redirect:/post/" + postDTO.get().getId() + "/" + "Hello"; // working fine
return "redirect:/post/" + postDTO.get().getId() + "/" + "مرحبا"; // not working

不起作用表示@PathVariable("title") Optional<String> title在重定向后将为空。

0 个答案:

没有答案
相关问题