Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧座控制器POST请求不存在';行不通_Java_Angularjs_Spring_Rest_Spring Mvc - Fatal编程技术网

Java 弹簧座控制器POST请求不存在';行不通

Java 弹簧座控制器POST请求不存在';行不通,java,angularjs,spring,rest,spring-mvc,Java,Angularjs,Spring,Rest,Spring Mvc,我有一个休息控制器: @RestController @RequestMapping("/query") public class QueryController { @Autowired private QueryService queryService; @RequestMapping(value = "/select", method = RequestMethod.POST) public @ResponseBody QueryResultDTO ex

我有一个休息控制器:

@RestController
@RequestMapping("/query")
public class QueryController {

    @Autowired
    private QueryService queryService;

    @RequestMapping(value = "/select", method = RequestMethod.POST)
    public @ResponseBody QueryResultDTO executeQuery(@RequestBody QueryDTO queryDTO) {
        try {
            QueryResultDTO queryResultDTO = queryService.executeQuery("select * from employees");
            queryResultDTO.setSuccessful(true);
            return queryResultDTO;
        } catch (SQLException e) {
            QueryResultDTO queryResultDTO = new QueryResultDTO();
            queryResultDTO.setSuccessful(false);
            queryResultDTO.setErrorMessage(e.getMessage());
            return queryResultDTO;
        }
    }
}
app.controller("AppCtrl",function($scope,$http) {
    var app = this;

    $scope.execute= function () {
        $http({
            url: '../query/select',
            method: "POST",
            data: { 'message' : $scope.queryText }
        })
            .then(function(response) {
                    $scope.queryResult = response.data;
                    console.log($scope.queryResult);
                    console.log($scope.queryText)
                },
                function(response) {
                    console.log(response);
                });
    }

});
app.controller("AppCtrl",function($scope,$http) {
    var app = this;

    $scope.execute= function () {
        $http({
            url: '../query/select',
            method: "GET",
            data: { 'message' : $scope.queryText }
        })
            .then(function(response) {
                    $scope.queryResult = response.data;
                    console.log($scope.queryResult);
                    console.log($scope.queryText)
                },
                function(response) {
                    console.log(response);
                });
    }

});
我尝试从AngularJS控制器发送POST请求:

@RestController
@RequestMapping("/query")
public class QueryController {

    @Autowired
    private QueryService queryService;

    @RequestMapping(value = "/select", method = RequestMethod.POST)
    public @ResponseBody QueryResultDTO executeQuery(@RequestBody QueryDTO queryDTO) {
        try {
            QueryResultDTO queryResultDTO = queryService.executeQuery("select * from employees");
            queryResultDTO.setSuccessful(true);
            return queryResultDTO;
        } catch (SQLException e) {
            QueryResultDTO queryResultDTO = new QueryResultDTO();
            queryResultDTO.setSuccessful(false);
            queryResultDTO.setErrorMessage(e.getMessage());
            return queryResultDTO;
        }
    }
}
app.controller("AppCtrl",function($scope,$http) {
    var app = this;

    $scope.execute= function () {
        $http({
            url: '../query/select',
            method: "POST",
            data: { 'message' : $scope.queryText }
        })
            .then(function(response) {
                    $scope.queryResult = response.data;
                    console.log($scope.queryResult);
                    console.log($scope.queryText)
                },
                function(response) {
                    console.log(response);
                });
    }

});
app.controller("AppCtrl",function($scope,$http) {
    var app = this;

    $scope.execute= function () {
        $http({
            url: '../query/select',
            method: "GET",
            data: { 'message' : $scope.queryText }
        })
            .then(function(response) {
                    $scope.queryResult = response.data;
                    console.log($scope.queryResult);
                    console.log($scope.queryText)
                },
                function(response) {
                    console.log(response);
                });
    }

});
但它不起作用。Spring控制器中的My
executeQuery
函数甚至没有被调用

但当我改变RequestMethod以使其正确工作时

@RestController
@RequestMapping("/query")
public class QueryController {

    @Autowired
    private QueryService queryService;

    @RequestMapping(value = "/select", method = RequestMethod.GET)
    public @ResponseBody QueryResultDTO executeQuery() {
        try {
            QueryResultDTO queryResultDTO = queryService.executeQuery("INSERT INTO employee VALUES (7,'dupa')");
            queryResultDTO.setSuccessful(true);
            return queryResultDTO;
        } catch (SQLException e) {
            QueryResultDTO queryResultDTO = new QueryResultDTO();
            queryResultDTO.setSuccessful(false);
            queryResultDTO.setErrorMessage(e.getMessage());
            return queryResultDTO;
        }
    }
}
在角度控制器中:

@RestController
@RequestMapping("/query")
public class QueryController {

    @Autowired
    private QueryService queryService;

    @RequestMapping(value = "/select", method = RequestMethod.POST)
    public @ResponseBody QueryResultDTO executeQuery(@RequestBody QueryDTO queryDTO) {
        try {
            QueryResultDTO queryResultDTO = queryService.executeQuery("select * from employees");
            queryResultDTO.setSuccessful(true);
            return queryResultDTO;
        } catch (SQLException e) {
            QueryResultDTO queryResultDTO = new QueryResultDTO();
            queryResultDTO.setSuccessful(false);
            queryResultDTO.setErrorMessage(e.getMessage());
            return queryResultDTO;
        }
    }
}
app.controller("AppCtrl",function($scope,$http) {
    var app = this;

    $scope.execute= function () {
        $http({
            url: '../query/select',
            method: "POST",
            data: { 'message' : $scope.queryText }
        })
            .then(function(response) {
                    $scope.queryResult = response.data;
                    console.log($scope.queryResult);
                    console.log($scope.queryText)
                },
                function(response) {
                    console.log(response);
                });
    }

});
app.controller("AppCtrl",function($scope,$http) {
    var app = this;

    $scope.execute= function () {
        $http({
            url: '../query/select',
            method: "GET",
            data: { 'message' : $scope.queryText }
        })
            .then(function(response) {
                    $scope.queryResult = response.data;
                    console.log($scope.queryResult);
                    console.log($scope.queryText)
                },
                function(response) {
                    console.log(response);
                });
    }

});
我的主要问题是,我想向我的Spring控制器发送一些数据,然后向我的Angular控制器发送
JSON
。Whith
GET
methodresponse工作得很好,但是当我使用
POST
时,甚至没有调用controller方法

编辑:

我的
QueryDTO
类很简单:

public class QueryDTO {

    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
以及一些具有
DEBUG
级别的日志:

2016-06-06 09:28:23.697 DEBUG 7504 --- [nio-8090-exec-2] o.s.web.servlet.DispatcherServlet        : Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2016-06-06 09:28:23.698 DEBUG 7504 --- [nio-8090-exec-2] o.s.web.servlet.DispatcherServlet        : Successfully completed request

尝试在方法中添加
consumes=MediaType.APPLICATION\u JSON\u值

@Transactional
@RequestMapping(value = "/userlogincheck", method = RequestMethod.POST,   consumes=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody void userLoginCheck(@RequestBody UserImpl user, HttpServletRequest request, HttpServletResponse response) throws JSONException, IOException {
JSONObject json = new JSONObject();
    try {
        String email=user.getEmail();
        Long userId=user.getId();
        User loginData = accountService.userLoginCheck(email,userId);
        if(loginData==null)
        {
            json.put("status", "FAILURE");
            json.put("message", "user does not exist");
            json.put("nextPage", "signIn");
        }
        else
        {
            json.put("status", "SUCCESS");
            json.put("nextPage", updateState);
        }
    }
    catch(Exception e) {
        logger.info(e.getMessage());
    }
    response.setContentType("application/json;charset=UTF-8");
    logger.info("response======" + json.toString());
    PrintWriter out = response.getWriter();
    out.write(json.toString());
}

尝试在方法中添加
consumes=MediaType.APPLICATION\u JSON\u值

@Transactional
@RequestMapping(value = "/userlogincheck", method = RequestMethod.POST,   consumes=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody void userLoginCheck(@RequestBody UserImpl user, HttpServletRequest request, HttpServletResponse response) throws JSONException, IOException {
JSONObject json = new JSONObject();
    try {
        String email=user.getEmail();
        Long userId=user.getId();
        User loginData = accountService.userLoginCheck(email,userId);
        if(loginData==null)
        {
            json.put("status", "FAILURE");
            json.put("message", "user does not exist");
            json.put("nextPage", "signIn");
        }
        else
        {
            json.put("status", "SUCCESS");
            json.put("nextPage", updateState);
        }
    }
    catch(Exception e) {
        logger.info(e.getMessage());
    }
    response.setContentType("application/json;charset=UTF-8");
    logger.info("response======" + json.toString());
    PrintWriter out = response.getWriter();
    out.write(json.toString());
}

我也遇到了同样的问题,通过向我的请求中添加CSRF令牌可以解决这个问题(只有在使用Web安全性时,这才是一个问题)

此链接描述了以下步骤:

1) 将令牌添加到您的头中,使用thymeleaf,您可以执行以下操作(我认为您也可以从cookie中获取令牌):


我也遇到了同样的问题,通过向我的请求中添加CSRF令牌可以解决这个问题(只有在使用Web安全性时,这才是一个问题)

此链接描述了以下步骤:

1) 将令牌添加到您的头中,使用thymeleaf,您可以执行以下操作(我认为您也可以从cookie中获取令牌):


QueryTo需要哪些属性?请张贴其代码。你试过做出明确的回应吗?定义。最后,您还可以尝试更改公司添加。您的QueryTo看起来怎么样?如果Spring message converter正在将JSON转换为QueryTo,您是否检查了日志。我已经用QueryTo代码和一些日志更新了我的帖子。您能否将org.springframework.web设置为在日志配置中调试并粘贴跟踪?QueryTo需要哪些属性?请张贴其代码。你试过做出明确的回应吗?定义。最后,您还可以尝试更改公司添加。您的QueryTo看起来怎么样?如果Spring message converter正在将JSON转换为QueryTo,您是否检查了日志。我已经用QueryTo代码和一些日志更新了我的帖子。您能否将org.springframework.web设置为在日志配置中调试并粘贴跟踪?