spring 如何设置路径变量的默认值?

njthzxwz  于 2023-02-18  发布在  Spring
关注(0)|答案(5)|浏览(258)
@GetMapping(value = "/{locale}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> getLocale(@PathVariable("locale") String locale) {
    return new ResponseEntity<>(locale, HttpStatus.OK);
}

我想如果locale为空,我可以设置一个默认值“英语”。

jdzmm42g

jdzmm42g1#

默认情况下,PathVariable是必需的,但您可以将其设置为可选:

@GetMapping(value = "/{locale}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> getLocale(@PathVariable(name="locale", required= 
false) String locale) {
//set english as default value if local is null   
locale = locale == null? "english": locale;
return new ResponseEntity<>(locale, HttpStatus.OK);
}
t2a7ltrp

t2a7ltrp2#

您可以使用必需的false属性,然后检查是否为null或空字符串值。请参阅this thread

getLocale(@PathVariable(name ="locale", required= false) String locale

然后检查是否为null或空字符串。

dffbzjpn

dffbzjpn3#

到目前为止,您无法为Spring路径变量提供缺省值。
您可以执行以下显而易见的操作:

@GetMapping(value = "/{locale}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> getLocale(@PathVariable("locale") String locale) {
    locale = locale == null? "english": locale;
    return new ResponseEntity<>(locale, HttpStatus.OK);
}

但更合适的方法是使用Spring i18n.CookieLocaleResolver,这样您就不再需要该路径变量了:

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
        <property name="defaultLocale" value="en"/>
    </bean>
4c8rllxm

4c8rllxm4#

我们可以将@PathVariable的required属性设置为false以使其可选。
但是我们还需要监听没有路径变量的请求。

@GetMapping(value = { "/{locale}", "/" }, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> getLocale(@PathVariable("locale") String locale) {
    return new ResponseEntity<>(locale, HttpStatus.OK);
}
yb3bgrhw

yb3bgrhw5#

您只需提供默认值

@GetMapping(value = "/{locale}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> getLocale(@PathVariable("locale", defaultValue="english") String locale) {
    return new ResponseEntity<>(locale, HttpStatus.OK);
}

相关问题