我从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
答案 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
中找到此信息答案 2 :(得分:0)
基于函数参数的问题,REST控制器应该采用String参数,然后将其解析为JSON对象,响应也应该是String。主题可以关闭,感谢所有参与者。