在jsp页面中显示来自Controller MVC的异常消息

时间:2015-05-04 12:24:54

标签: java spring

StudentController - 这是我的控制器类,它返回异常,我想在jsp中处理和显示它们

 @RequestMapping(value = RequestURL.ADD_STUDENT, method = RequestMethod.POST)
        @ResponseBody
        public void addStudent(@RequestBody AddStudentRequest addStudentRequest) throws StudentGroupNumberNotFoundException, SpecializationNotFoundException {

            User user = new User(addStudentRequest.getUsername(),
                    addStudentRequest.getPassword(), Role.ROLE_STUDENT);
            userService.add(user);

            user = userService.findByUsername(addStudentRequest.getUsername());
            int userId = user.getId();
            try {
                int groupId = studentGroupService
                        .getIdByGroupNumber(addStudentRequest.getGroup());
                int specializationId = specializationService
                        .getIdByName(addStudentRequest.getSpecialization());
                Student student = new Student(userId, specializationId,
                        addStudentRequest.getName(),
                        addStudentRequest.getRegistrationNumber(), groupId,
                        addStudentRequest.getYear());
                studentService.add(student);
            } catch (StudentGroupNumberNotFoundException e) {
                throw new StudentGroupNumberNotFoundException(e.getMessage());
            } catch (SpecializationNotFoundException e) {
                throw new SpecializationNotFoundException (e.getMessage());
            }
        }

student.jsp - 学生的jsp页面

    function addStudent() {

            var username = $('#modalStudentUsername').val();
            var password = $('#modalStudentPassword').val();
            var name = $('#modalStudentName').val();
            var registrationNumber = $('#modalStudentRegistrationNumber').val();
            var group = $('#modalStudentGroup').val();
            var year = $('#modalStudentYear').val();
            var specialization = $('#modalStudentSpecializationId').val();

            var data = '{ "username" : "' + username + '", "password": "'
            + password + '", "name":"' + name
            + '","registrationNumber": "' + registrationNumber + '" , "specialization": "' + specialization 
            + '","group": "' + group+'", "year": " ' + year + '" }';

            var token = $('#csrfToken').val();
            var header = $('#csrfHeader').val();

            $.ajax({
                        type : "POST",
                        url : "student/add",
                        contentType : 'application/json',
                        data : data,

                        beforeSend : function(xhr) {
                            xhr.setRequestHeader("Accept", "application/json");
                            xhr.setRequestHeader("Content-Type", "application/json");
                            xhr.setRequestHeader(header, token);
                        }, 

                        success : function(data, status, xhr) {
                            alert("Success!");
                        },
                        error : function(xhr, status, errorThrown) {
                            alert("Error!");
                        },
                    });
        }

我想在ajax的警报中显示来自控制器的异常消息。谁能帮助我?谢谢!

1 个答案:

答案 0 :(得分:0)

将方法返回类型从void更改为String&拨打xhr.responseText 中的alert(),如下所示: -

更改控制器:

@ResponseBody
public void addStudent(@RequestBody AddStudentRequest addStudentRequest) throws StudentGroupNumberNotFoundException, SpecializationNotFoundException {
     // business logic
}

@ResponseBody
public String addStudent(@RequestBody AddStudentRequest addStudentRequest) throws StudentGroupNumberNotFoundException, SpecializationNotFoundException {
     // business logic
}

更改JavaScript:

function addStudent() {
    // ...
    $.ajax({
        type : "POST",
        url : "student/add",
        contentType : 'application/json',
        data : data,
        beforeSend : function(xhr) {
            xhr.setRequestHeader("Accept", "application/json");
            xhr.setRequestHeader("Content-Type", "application/json");
            xhr.setRequestHeader(header, token);
        },
        success : function(data, status, xhr) {
            alert(xhr.responseText);
        },
        error : function(xhr, status, errorThrown) {
            alert(xhr.responseText);
        },
    });
}