有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

显示发生错误的java Ajax请求:Spring mvc maven项目

当ajax调用发生时,它显示错误发生,而没有任何tomcat错误日志。而在浏览器上显示的是400

这是我的ajax调用

    var data = {    
            "topic" : $("#topic").val()}
    $.ajax({
        type : "GET",
        contentType : "application/json",
        url : "./saveSyllabus",
        data : JSON.stringify(data),
        dataType : 'json',
        timeout : 100000,
        success : function(data) {
            console.log("SUCCESS: ", data);
            alert("Record Added Successfully!!")
        },
        error : function(e) {
            console.log("ERROR: ", e);
            alert("Error Occured!!")
        },
        done : function(e) {
            console.log("DONE");
            enableSearchButton(true);
        }
    });

控制器代码:

@Controller
public class RegistrationController {

    @Autowired
    UserCreationService userCreationService;

    @Autowired
    SyllabusService syllabusService;

    @RequestMapping(value="/saveSyllabus",method=RequestMethod.GET)
    public @ResponseBody String saveSyllabus(@RequestParam  String topic) {
        System.out.println("in registration controller");

        Integer id= syllabusService.saveSyllabus(syllabusDetails);


        return id;

    }
}

我还添加了所需的从属关系:

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>

共 (2) 个答案

  1. # 1 楼答案

    您的问题是控制器配置为在主体中响应,但您正在执行重定向,在您的情况下,您似乎想要重定向,因此请删除@ResponseBody

    @RequestMapping(value="/saveSyllabus",method=RequestMethod.GET)
    public String saveSyllabus(@RequestParam  String topic,RedirectAttributes rd) {
        System.out.println("in registration controller");
    
        Integer id= syllabusService.saveSyllabus(syllabusDetails);
        if(id>0){
            rd.addFlashAttribute("id", 1);
        } else {
            rd.addFlashAttribute("id",0);
        }
    
        return "redirect:"+ "/register";
    
    }
    

    当您执行重定向时,这应该是一个浏览器URL调用,而不是Ajax调用

    相反,如果你想回应身体,试试这个

    var data = {    
            "topic" : $("#topic").val()}
    $.ajax({
        type : "GET",
        contentType : "application/json",
        url : "./saveSyllabus",
        data : JSON.stringify(data),
        dataType : 'json',
        timeout : 100000,
        success : function(data) {
            console.log("SUCCESS: ", data);
            alert("Record Added Successfully!!")
        },
        error : function(e) {
            console.log("ERROR: ", e);
            alert("Error Occured!!")
        },
        done : function(e) {
            console.log("DONE");
            enableSearchButton(true);
        }
    });
    

    @RequestMapping(value="/saveSyllabus",method=RequestMethod.GET)
    public @ResponseBody String saveSyllabus(@RequestBody  String topic) {
        System.out.println("in registration controller");
    
        Integer id= syllabusService.saveSyllabus(syllabusDetails);
    
        return String.valueOf(id);
    
    }
    

    注意@ReuqestParam更改为@RequestBody,方法内容也更改了

  2. # 2 楼答案

    您正在使用@ResponseBody从@Controller返回一个字符串值,但您的AJAX希望从Controllerdatatype: 'json',返回一个JSON响应。将AJAX响应预期更改为HTMLdatatype : 'HTML',,它将返回状态200