SpringMVC面试题及答案(26-30)

26、SpringMVC中如何使用@ResponseStatus注解?
在SpringMVC中,我们可以使用@ResponseStatus注解来设置HTTP响应状态码。通常情况下,@ResponseStatus注解应该标注在异常类上,以便我们在发生异常时能够返回正确的HTTP状态码。使用@ResponseStatus注解可以使我们更加方便地对异常进行处理,同时也能够提高应用程序的可读性和可维护性。

下面是一个使用@ResponseStatus注解的例子:

@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
    public ResourceNotFoundException(String message) {
        super(message);
    }
}

在这个例子中,我们定义了一个ResourceNotFoundException异常类,并使用@ResponseStatus注解将该异常映射到HTTP状态码404。这样,当该异常被抛出时,就会返回404状态码。

27、SpringMVC中如何使用@RequestParam注解?
在SpringMVC中,我们可以使用@RequestParam注解来获取请求参数。@RequestParam注解的value属性用于指定请求参数的名称,required属性用于指定是否必须传递该参数,defaultValue属性用于指定参数的默认值。

下面是一个使用@RequestParam注解的例子:

@RequestMapping("/user")
public String getUser(@RequestParam("id") int userId) {
    User user = userService.getUserById(userId);
    return user.toString();
}

在这个例子中,我们使用@RequestParam注解获取名为id的请求参数,并将其转换为int类型的userId参数。如果请求中没有id参数,则会抛出MissingServletRequestParameterException异常。

28、SpringMVC中如何使用@SessionAttributes注解?
在SpringMVC中,我们可以使用@SessionAttributes注解来指定控制器处理器的会话属性。@SessionAttributes注解的value属性用于指定会话属性的名称,types属性用于指定会话属性的类型。一旦我们指定了会话属性,SpringMVC就会自动将这些属性添加到会话中。

下面是一个使用@SessionAttributes注解的例子:

@Controller
@RequestMapping("/user")
@SessionAttributes("user")
public class UserController {

    @RequestMapping("/show")
    public String showUser(ModelMap model) {
        User user = new User();
        user.setId(1);
        user.setName("Tom");
        user.setAge(20);
        model.addAttribute("user", user);
        return "user/show";
    }

    @RequestMapping("/update")
    public String updateUser(@ModelAttribute("user") User user) {
        userService.updateUser(user);
        return "redirect:/user/show";
    }

}

在这个例子中,我们使用@SessionAttributes注解指定控制器处理器的会话属性为user,即User类型。在showUser方法中,我们创建了一个User对象,并将其添加到模型中,由于该方法使用了@SessionAttributes注解,因此该对象将被自动添加到会话中。在updateUser方法中,我们使用@ModelAttribute注解将会话中的user属性绑定到方法参数中,然后进行更新操作。

29、SpringMVC中如何使用@Valid注解?
@Valid注解用于数据验证,可以用于Controller的参数上,表示验证该参数是否符合约束条件。在使用@Valid注解时,需要在Controller类上添加@Validated注解,表示该Controller需要进行数据验证。

例如:

@PostMapping("/users")
public String createUser(@Valid User user, BindingResult result) {
    if (result.hasErrors()) {
        return "create-user";
    }
    userService.save(user);
    return "redirect:/users";
}

30、SpringMVC中如何使用@RequestParam和@PathVariable区分GET和POST请求?

SpringMVC中使用@RequestParam和@PathVariable注解可以区分GET和POST请求。@RequestParam注解用于从请求参数中获取值,常用于GET请求;@PathVariable注解用于从路径中获取值,常用于RESTful风格的请求。可以根据请求方式使用相应的注解,如下所示:

@GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) {
    // 处理GET请求
}

@PostMapping("/users")
public String createUser(@RequestParam String name, @RequestParam Integer age) {
    // 处理POST请求
}