当前位置:首页 > Web开发 > 正文

标签: @JsonView使用 使用接口来声明多个视图 在值对象的get方法上指定视图 在Controller方法上指

2024-03-31 Web开发

标签:

@JsonView使用

使用接口来声明多个视图

在值东西的get要领上指定视图

在Controller要领上指定视图

public interface UserDetailView extends UserSimpleView { } public interface UserSimpleView {} public class User { private String username; private String password; private int age; public User() { } public User(String username, String password, int age) { this.username = username; this.password = password; this.age = age; } @JsonView(UserSimpleView.class) public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @JsonView(UserDetailView.class) public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } @RestController @SpringBootApplication public class UserController { @JsonView(UserDetailView.class) @GetMapping("/userdetail") public User userDetail(){ return new User("tom","123",22); } @JsonView(UserSimpleView.class) @GetMapping("/user") public User user(){ return new User("tom","123",22); } public static void main(String[] args) { SpringApplication.run(UserController.class); } }

测试

@RunWith(SpringRunner.class) @SpringBootTest(classes = UserController.class) public class UserTest { @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setUp(){ mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); } @Test public void test() throws Exception { String res = mockMvc.perform(get("/userdetail") .contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(status().isOk()) .andReturn().getResponse().getContentAsString(); System.out.println(res); } @Test public void test2() throws Exception { String res = mockMvc.perform(get("/user") .contentType(MediaType.APPLICATION_JSON_UTF8)) .andExpect(status().isOk()) .andReturn().getResponse().getContentAsString(); System.out.println(res); } } @RequestBody 映射请求体到java要领的参数 @PostMapping public void create(@RequestBody User user){ System.out.println(user.toString()); } @Test public void test3() throws Exception { String user = "{\"username\":\"tom\",\"password\":\"null\"}"; mockMvc.perform(post("/user").contentType(MediaType.APPLICATION_JSON_UTF8).content(user)) .andExpect(status().isOk()); } @Valid注解和BindingResult验证请求参数的合法性并措置惩罚惩罚校验功效

参考import javax.validation.constraints

public class User { private String username; @NotNull(message = "暗码不能为空") private String password; @PostMapping public void create(@Valid @RequestBody User user, BindingResult errors){ if (errors.hasErrors()){ errors.getAllErrors().forEach(e->{ FieldError fieldError = (FieldError) e; String msg = fieldError.getField() + " " + fieldError.getDefaultMessage(); System.out.println(msg); }); }else { System.out.println(user.toString()); } } 拦截

过滤器Filter

使用@Component

@Component public class TimeFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("TimeFilter init"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("TimeFilter start"); long start = new Date().getTime(); filterChain.doFilter(servletRequest, servletResponse); System.out.println("耗时:"+(new Date().getTime()-start)); System.out.println("TimeFilter end"); } @Override public void destroy() { System.out.println("TimeFilter destroy"); } }

不使用@Component

@Configuration public class WebConfig { @Bean public FilterRegistrationBean timeFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); TimeFilter timeFilter = new TimeFilter(); registrationBean.setFilter(timeFilter); List<String> urls = new ArrayList<>(); urls.add("/*");//所有请求 registrationBean.setUrlPatterns(urls); return registrationBean; } }

拦截器Interceptor

会拦截所有请求,包孕spring自己的措置惩罚惩罚

可以拿到要领但没法拿到参数值

@Component public class TimeInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("TimeInterceptor preHandle"); request.setAttribute("time",new Date().getTime()); HandlerMethod handlerMethod = (HandlerMethod)handler; System.out.println(handlerMethod.getBean().getClass().getName()); System.out.println(handlerMethod.getMethod().getName()); return true; } //告成后执行 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("TimeInterceptor postHandle"); System.out.println("耗时:"+(new Date().getTime()-(Long) request.getAttribute("time"))); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("TimeInterceptor afterCompletion"); System.out.println("耗时:"+(new Date().getTime()-(Long) request.getAttribute("time"))); System.out.println("ex:"+ex); } } @Configuration public class WebConfig2 extends WebMvcConfigurationSupport { @SuppressWarnings("unused") @Autowired private TimeInterceptor interceptor; @Override protected void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(interceptor); } }

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30956.html