⭕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"));
}
}
⚡五. 效果



