栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring MappingJackson2JsonView的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring MappingJackson2JsonView的使用

⭕MappingJackson2JsonView作用

原本ModelAndView会返回视图,并且可以携带数据展示到视图中
MappingJackson2JsonView可以让ModelAndView不返回视图,仅仅返回JSON数据,


目录
  • ⏹一. 前台
  • ⏹二. 后台业务层
  • ⏹三. 后台自定义校验异常
  • ⏹四. 后台全局异常捕获
  • ⚡五. 效果

⏹一. 前台



    
    
    MappingJackson2JsonView的使用


    




⏹二. 后台业务层
@Controller
@RequestMapping("/test3")
public class Test3Controller {

    @Autowired
    private Test3Service service;
    
    @PostMapping("/check")
    public void check(@RequestBody Test3Form form) {

        service.check(form);
    }
}
// ------------------------------------------------------

@Service
public class Test3Service {

    public void check(Test3Form form) {
		
		// 如果from的值比to还要大的话,就抛出自定义异常
        if (form.getFrom() > form.getTo()) {
            List errors = Collections.singletonList(ErrorItemEntity.of("大小不对", "id名称"));
            throw new ValidationException(errors);
        }
    }
}
⏹三. 后台自定义校验异常
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.ArrayList;
import java.util.List;

@Data
@EqualsAndHashCode(callSuper = true)
public class ValidationException extends RuntimeException {

    // 错误信息
    private List errors;
    
    
    public ValidationException(List errors) {
        super();
        this.errors = errors;
    }
}
⏹四. 后台全局异常捕获
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@ControllerAdvice
public class GlobalExceptionHandler {
	
	// 捕获我们自定义的校验异常
	@ExceptionHandler(ValidationException.class)
	public ModelAndView handleException(ValidationException ex, HttpServletRequest request, HttpServletResponse response) {

	    // 自定义结果封装类
		ResultEntity resultEntity = ResultEntity.ng();

        // 校验失败,返回400的状态码
        response.setStatus(HttpServletResponse.SC_BAD_REQUEST);

        if (ex.getErrors() != null) {
            resultEntity.setErrors(ex.getErrors());
        }

        // 如果是Ajax请求的话
		if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {

            // 拾MappingJackson2JsonView的作用是把model转换为json
			MappingJackson2JsonView jsonView = new MappingJackson2JsonView();
			
			jsonView.setExtractValueFromSingleKeyModel(true);

			// ModelAndView是通过MappingJackson2JsonView构成的,因此并不定位到视图,而是返回json数据
			ModelAndView mv = new ModelAndView(jsonView);
			mv.addObject("jsonKey", resultEntity);
			return mv;
		}

		// 重定向到错误页面
        return new ModelAndView(new RedirectView(request.getContextPath() + "/systemError"));
	}
}

⚡五. 效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008203.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号