可选的int参数'rating'存在但由于被声明为基本类型而无法转换为空值

时间:2018-06-11 17:01:04

标签: spring-mvc jsp

我正在为我的项目使用mvc spring和mysql workbench。在我的一个页面上,用户可以向商店添加评论和评级。问题是,我希望评级和评论是可选的 - 评论是,评级不是。当我像这样使用我的控制器时:

 @RequestMapping(value={"/", "/shop"}, method=RequestMethod.POST)
public String kmetija11(@RequestParam(value = "rating", required = false) int mark,
                        @RequestParam(value = "content", required = false) String comment)
{
    markDao.addMark(mark);
    commentDao.addComment(comment);
    return "redirect:/input";

}

我从此表单中获得评分值:

<form method="POST" action="/shop">
                        <div class="form-group">
                            <textarea class="form-control" rows="2" value="Add comment ..." name="content"></textarea>
                            <ul class="rate-area">
                                <input type="radio" id="5-star" name="rating" value="5" /><label for="5-star">5 stars</label>
                                <input type="radio" id="4-star" name="rating" value="4" /><label for="4-star">4 stars</label>
                                <input type="radio" id="3-star" name="rating" value="3" /><label for="3-star">3 stars</label>
                                <input type="radio" id="2-star" name="rating" value="2" /><label for="2-star">2 stars</label>
                                <input type="radio" id="1-star" name="rating" value="1" /><label for="1-star">1 star</label>
                            </ul>
                            <br/><br/>

                        </div>
                        <button type="submit" class="btn" >Add comment / mark</button>
                    </form>

所以会发生什么,如果我不放 - &gt; value =“rating”,required = false)&lt; - 它表示该参数是必需的,因为默认值为true。但是,如果我按原样放置代码,我会收到此错误:http://prntscr.com/jtppgo

如果有人知道该做什么,我会很高兴听到答案。 提前谢谢!

3 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为int是一种原始数据类型,默认值为零。

请使用包装类Integer代替int

答案 1 :(得分:0)

只需将int更改为Integer即可完成。原语不能为空,对象可以..

答案 2 :(得分:0)

它不一定能解决问题。当通过HTTP协议传输值时,它不是类型,而是字符串,然后将其转换为“ Integer”则没有任何作用。因此,就我而言,我必须添加

@RequestParam (required=false, defaultValue= "10") int integerExample

所以我将默认值设置为字符串。现在它就像一种魅力:)