Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring中,@RequestParameter注释不接受默认值参数的布尔值,它仅适用于字符串URL请求参数_Java_Spring_Spring Mvc - Fatal编程技术网

Java 在Spring中,@RequestParameter注释不接受默认值参数的布尔值,它仅适用于字符串URL请求参数

Java 在Spring中,@RequestParameter注释不接受默认值参数的布尔值,它仅适用于字符串URL请求参数,java,spring,spring-mvc,Java,Spring,Spring Mvc,这个问题与我在下面定义的Spring MVC方法有关: writeToRead参数的值应为true或false。我希望调用我的服务的最终用户将以下请求参数附加到url:localhost:8080/index/someendpoint/sometype中:?writeToRead=true,否则,如果用户不将参数附加到url字符串的末尾,它将默认为false。问题是,@RequestParameter注释中的defaultValue=false似乎不可接受。看起来它只接受字符串类型,而不是我正在

这个问题与我在下面定义的Spring MVC方法有关:

writeToRead参数的值应为true或false。我希望调用我的服务的最终用户将以下请求参数附加到url:
localhost:8080/index/someendpoint/sometype
中:
?writeToRead=true
,否则,如果用户不将参数附加到url字符串的末尾,它将默认为false。问题是,
@RequestParameter
注释中的
defaultValue=false
似乎不可接受。看起来它只接受字符串类型,而不是我正在使用的布尔类型。我可以设置defaultValue=“false”,但实际上,这不是布尔值。这是一根绳子。我应该如何处理这个问题?由于方法重载的定义冲突,我不能使用字符串替代项(如“Y”或“N”)来解决这个问题。我怎样才能用布尔人做到这一点?提前谢谢你

@RequestMapping(value="/index/{endpoint}/{type}", method=RequestMethod.POST, consumes=kCompressed, produces=kProducesType)
@ResponseBody
public String indexData(@PathVariable(value="endpoint") String endpoint, @PathVariable(value="type") String type, 
                        @RequestParam(value="writeToRead", defaultValue=false) boolean writeToRead,                 
                        @RequestBody byte[] body, HttpServletRequest request) throws Exception {
    logger.debug("In indexData for endpoint " + endpoint);

    String bodyStr = decompress(body);
    return indexController.indexData(endpoint, type, bodyStr, writeToRead, getSecurityContextProvider(request));
}   
宣布为

@RequestParam(value="writeToRead", defaultValue="false")

这是应该做的事。请求参数是字符串,而不是其他参数。您可以解析它们并为它们提供您想要或需要的语义(例如布尔值),但从根本上说,它们只是字符串。

这是怎么回事?如果最终用户没有将
?writeToRead=true
附加到url的末尾,则方法定义中的writeToRead值将由于defaultValue而变为“false”,但这不起作用。由于
indexData()
的参数接受布尔值(false),而不是字符串“false”。@TazMan Spring使用许多默认和自定义转换器将字符串值转换为指定的类型。因此,它将执行类似于
Boolean.parseBoolean(“false”)
的操作,并将返回值作为参数传递给您的方法。类似地,如果您的参数是
长的
,您可以执行
defaultValue=“12345”
。非常好。这就意味着我不必做任何类似于
Boolean.parseBoolean(“false”)
的事情。斯普林会在我不注意的情况下从内部解决它。@TazMan说得对。它适用于基本类型和枚举,但对于任何引用类型(除了
字符串
),您通常必须注册自己的转换器。@TazMan非常欢迎您。因为我在那里花了太多时间,所以链接到解释这种行为的文档。