Java 如何在spring引导中有效使用@RequestHeader
如果缺少或格式错误,如何验证所需的标题Java 如何在spring引导中有效使用@RequestHeader,java,spring,rest,validation,spring-boot,Java,Spring,Rest,Validation,Spring Boot,如果缺少或格式错误,如何验证所需的标题 @RequestMapping(value = "/example/{id}", method = RequestMethod.PUT) public ResponseEntity<> update(@RequestHeader(value="last-modified-date") String lastModDate, HttpServletRequest request, @
@RequestMapping(value = "/example/{id}", method = RequestMethod.PUT)
public ResponseEntity<> update(@RequestHeader(value="last-modified-date") String lastModDate, HttpServletRequest request,
@RequestBody ReBody rebody, @PathVariable("id") int id) throws Exception{
// Stuff here...
}
或者在格式错误时抛出异常 你已经回答了你的问题。您只需按以下方式操作即可:-
public ResponseEntity<> update(@RequestHeader(value="last-modified-date") String lastModDate, HttpServletRequest request,
@RequestBody ReBody rebody, @PathVariable("id") int id) throws Exception{
if (lastModDate == null) {
throw Exception();
}
// Stuff here...
}
public ResponseEntity更新(@RequestHeader(value=“last modified date”)字符串lastModDate,HttpServletRequest请求,
@RequestBody ReBody ReBody,@PathVariable(“id”)int id)引发异常{
if(lastModDate==null){
抛出异常();
}
//这里的东西。。。
}
只需添加@Valid
注释即可
@RequestMapping(value = "/example/{id}", method = RequestMethod.PUT)
public ResponseEntity<> update(@Valid @RequestHeader(value="last-modified-date") String lastModDate, HttpServletRequest request,
@RequestBody ReBody rebody, @PathVariable("id") int id) throws Exception{
// Stuff here...
}
@RequestMapping(value=“/example/{id}”,method=RequestMethod.PUT)
公共响应属性更新(@Valid@RequestHeader(value=“last modified date”)字符串lastModDate,HttpServletRequest请求,
@RequestBody ReBody ReBody,@PathVariable(“id”)int id)引发异常{
//这里的东西。。。
}
但是您仍然需要手动执行格式验证。或者将
lastModDate
类型从String
更改为Date
,或者将其转换为timestamp
,您可以使用@Valid和@Pattern
@RequestMapping(value = "/example/{id}", method = RequestMethod.PUT)
public ResponseEntity<> update(@RequestHeader(value="last-modified-date", required = true) @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$") String lastModDate, HttpServletRequest request,
@RequestBody ReBody rebody, @PathVariable("id") int id) throws Exception{
// Stuff here...
}
@RequestMapping(value=“/example/{id}”,method=RequestMethod.PUT)
公共响应属性更新(@RequestHeader(value=“last modified date”,required=true)@Pattern(regexp=“^\\d{4}-\\d{2}-\\d{2}$”)字符串lastModDate,HttpServletRequest,
@RequestBody ReBody ReBody,@PathVariable(“id”)int id)引发异常{
//这里的东西。。。
}
我使用的更简单的选项是为标题定义一个默认值,因此如果标题值等于默认值,那么它就会丢失。我已经重写了你的方法。见下文
// -- defaultValue = "missingHeader" --
@RequestMapping(value = "/example/{id}", method = RequestMethod.PUT)
public ResponseEntity<> update(@RequestHeader(value="last-modified-date", defaultValue = "missingHeader") String lastModDate, HttpServletRequest request,
@RequestBody ReBody rebody, @PathVariable("id") int id) throws Exception
{
// --added this---
if (lastModDate.equals("missingHeader")) // means header is missing
{
throw Exception();
}
}
/--defaultValue=“missingHeader”--
@RequestMapping(value=“/example/{id}”,method=RequestMethod.PUT)
公共响应属性更新(@RequestHeader(value=“last modified date”,defaultValue=“missingHeader”)字符串lastModDate,HttpServletRequest请求,
@RequestBody ReBody ReBody,@PathVariable(“id”)int id)引发异常
{
//”他补充道---
if(lastModDate.equals(“missingHeader”)//表示缺少标头
{
抛出异常();
}
}
为什么不在这里的//Stuff中执行此操作。。。。这是两个独立的问题。如果缺少标头,则字符串将确实为空。验证确实取决于您,但一种可能的方法是定义您想要的确切格式,并尝试使用它进行提取。因为当标头为空时,它将在运行代码“//stuff”之前引发空点异常。现在格式已经定义好了,但是当格式不正确时,它抛出空点too@xiao是否将lastModDate作为字符串传递。我建议您以时间戳或ISO日期字符串形式发送日期,而不是像这样的字符串:Mon,2017年8月28日02:51:09 GMT
您可以指向一些或提及一些关键字来查找包javax.validation
的注释,或者一般的概念bean验证。
// -- defaultValue = "missingHeader" --
@RequestMapping(value = "/example/{id}", method = RequestMethod.PUT)
public ResponseEntity<> update(@RequestHeader(value="last-modified-date", defaultValue = "missingHeader") String lastModDate, HttpServletRequest request,
@RequestBody ReBody rebody, @PathVariable("id") int id) throws Exception
{
// --added this---
if (lastModDate.equals("missingHeader")) // means header is missing
{
throw Exception();
}
}