Spring Boot @RestController无响应

时间:2017-11-12 17:37:44

标签: java jquery rest spring-boot

我从Spring和REST应用程序开始。目前,我正在自行开发一个应用程序而且卡住了。

该应用程序就像标准的Spring Boot项目一样被划分。所有控制器都包含在web包中。 “标准”控制器之一负责处理HTTP请求并返回HTML网站。我添加了一个REST控制器,它应该响应来自第一个控制器的POST请求,但是我收到404错误。

代码中的样子如何?

@RestController
@RequestMapping("/users")
public class UserRestController {
    @Autowired
    private UserService userService;


    @RequestMapping(value = "/user", method = RequestMethod.POST,  consumes = "application/json", produces = "application/json")
    public ResponseEntity<?> getUser(@RequestParam("userId") String userId, Errors errors) {
        AjaxUser response = new AjaxUser();

        if (errors.hasErrors()) {
            response.message = errors.getAllErrors().stream().map(x -> x.getDefaultMessage()).collect(Collectors.joining(","));

            return ResponseEntity.badRequest().body(response);

        }

        response.setUser(userService.getUserById(Integer.getInteger(userId).intValue()));

        return ResponseEntity.ok(response);

    }

    private class AjaxUser {
        private User user;
        private String message;

        public void setUser(User user) {
            this.user = user;
        }

        public void setMessage(String message) {
            this.message = message;
        }

        public String getMessage() {
            return message;
        }

        @Override
        public String toString() {
            return "User { id:" + user.getId() + ", Name: " + user.getName() + ", surname: " + user.getSurname() + "}";
        }
    }
}

从.js文件中我发送一个ajax查询,它应该触发一个休息控制器,这里是代码:

function sendUserId(id) {
    var user = {};
    user["userId"] = id;

    console.log("USER: ", user);

    $.ajax({
        type: "POST",
        contentType: "application/json",
        url: "/users/user",
        data: JSON.stringify(user),
        dataType: 'json',
        cache: false,
        timeout: 100000,
        success: function (user) {

            var json = "<h4>Ajax Response</h4><pre>"
                + JSON.stringify(user, null, 4) + "</pre>";

            console.log("SUCCESS : ", user);

        },
        error: function (e) {

            var json = "<h4>Ajax Response</h4><pre>"
                + e.responseText + "</pre>";

            console.log("ERROR : ", e);
        }
    });
}

userId取自jQuery的html,console.log显示现有值和正确值。

注意:标准用户@Controller负责显示用户列表,工作正常,在向REST控制器发送用户ID时会出现问题。它的行为就像REST控制器不存在而浏览器返回404 status response。顺便说一下,页面使用Spring Secure登录等等。

有人可以帮忙吗?

BR Konrad

3 个答案:

答案 0 :(得分:0)

控制器正在寻找一个请求参数,您在js请求URL中缺少该参数

/users/user?userId=1

答案 1 :(得分:0)

您可以通过以下ID获取用户:

@RequestMapping(value = "{id}", method = RequestMethod.GET)
public ResponseEntity<User> get(@PathVariable("id") int id) {
User user = userService.findById(id);

if (user == null) {
return new ResponseEntity<User>(HttpStatus.NOT_FOUND);
}

return new ResponseEntity<User>(user, HttpStatus.OK);
}

所以你的休息入口点是/ users / userid,例如:/ users / 1

从帖子Spring MVC RESTFul Web Service CRUD Example

中找到此信息

答案 2 :(得分:0)

基于函数参数的问题,REST控制器应该采用String参数,然后将其解析为JSON对象,响应也应该是String。主题可以关闭,感谢所有参与者。