Spring 处理弹簧支撑分离的前端/后端post请求
我正试图用Spring开发一个RESTfulWebService,使用后端/webservice和前端的两个不同项目 在后端项目中,我实现了该模型Spring 处理弹簧支撑分离的前端/后端post请求,spring,web-services,rest,jakarta-ee,Spring,Web Services,Rest,Jakarta Ee,我正试图用Spring开发一个RESTfulWebService,使用后端/webservice和前端的两个不同项目 在后端项目中,我实现了该模型 @Entity @Table(name="user") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id_user", nullable = false) private String i
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id_user", nullable = false)
private String id;
@Column(name = "username", nullable = false)
private String username;
@Column(name = "firstname", nullable = false)
private String firstname;
@Column(name = "lastname", nullable = false)
private String lastname;
@Column(name = "password", nullable = false)
private String password;
@Column(name = "email", nullable = false)
private String email;
@Column(name = "own_printer", nullable = false)
private Boolean ownsPrinter;
// Getters Setters...
}
还有一个通过Hibernate4访问数据库的UserDAO类和一个用于业务流程的UserManager。然后是用户控制器:
@RestController
public class UserController {
private UserService userService ;
@RequestMapping(value = "/listusers")
List<User> getAllUser() {
Application.context = new ClassPathXmlApplicationContext("applicationContext.xml");
userService = (UserService) Application.context.getBean("userService");
List<User> users = userService.getUsers();
return users;
}
@RequestMapping(value = "/user/{userid}")
User getUserById(@PathVariable("userid") String userId) {
Application.context = new ClassPathXmlApplicationContext("applicationContext.xml");
userService = (UserService) Application.context.getBean("userService");
User user = userService.getUserById(userId);
return user;
}
@RequestMapping(value = "/user/add")
@ResponseBody
User signUpUser(@RequestBody User user ) {
// Don't really know what to do...
userService = (UserService) Application.context.getBean("userService");
return user;
}
}
现在对于前端项目,我实现了相同的用户类。我编写了一个UserDAO UserManager和UserController类:
//UserDAO.java
@Repository("userDAO")
public class UserDAOImpl implements UserDAO{
@Override
public ArrayList<User> getUsers() {
//User[] users = new RestTemplate().getForEntity(WebService.getWebServiceUrl() + "users", User[].class).getBody();
ArrayList<User> user = new RestTemplate().getForEntity(WebService.getWebServiceUrl() + "listusers", ArrayList.class).getBody();
return (user);
//return Arrays.asList(users);
}
@Override
public User getUserById(String userId) {
User user = new RestTemplate().getForEntity(WebService.getWebServiceUrl() + "user/" + userId, User.class).getBody();
return user;
}
@Override
public void insertUser(User user) {
// doesn't work
RestTemplate template = new RestTempl ate();
template.postForObject(WebService.getWebServiceUrl() + "user/add",user, String.class);
System.out.println(user.toString());
}
}
//UserController.java
@Controller
public class UserController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
private UserService userService = new UserServiceImpl();
@RequestMapping(value = "/listusers", method = RequestMethod.GET)
public String listUsers(@RequestParam(required=false)Locale locale, Model model) {
logger.info("Users page", locale);
ArrayList<User> users = userService.getUsers();
model.addAttribute("users", users);
return "listusers";
}
@RequestMapping(value = "/user/{user_id}", method = RequestMethod.GET)
public String singleUser(@RequestParam(required=false)Locale locale,
Model model,HttpServletRequest request, @RequestParam String id) {
logger.info("User page", locale);
User user = userService.getUserById(id);
model.addAttribute("user", user);
return "user";
}
@RequestMapping(value = "/signup", method = RequestMethod.GET)
public String listPersons(Model model) {
model.addAttribute("user", new User());
return "signup";
}
//For add and update person both
@RequestMapping(value= "/user/add", method = RequestMethod.POST)
@ResponseBody
public void saveUser(Model model, @ModelAttribute("user") User u){
RestTemplate rt = new RestTemplate();
rt.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
rt.getMessageConverters().add(new StringHttpMessageConverter());
String uri = new String(WebService.getWebServiceUrl() + "user/add");
User user = new User();
user = u;
User returns = rt.postForObject(uri, u, User.class);
}
}
get请求工作:我可以显示我的用户列表。但我的问题是,我无法通过post请求将数据从前端部分传递到后端Web服务部分。。。我一直在尝试几种解决方法,但我认为其他方法有问题
我是JavaEE应用程序领域的新手。有人能帮助我或指导我找到解决方案吗?在前端用户DAO中:
public ArrayList<User> getUsers() {
ArrayList<User> user = new RestTemplate().getForEntity(WebService.getWebServiceUrl() + "listusers", ArrayList.class).getBody();
return (user);
}
此代码允许通过uri/listuser请求服务器。在前端UserController上,您可以看到调用getUsers的函数:
@RequestMapping(value = "/listusers", method = RequestMethod.GET)
public String listUsers(@RequestParam(required=false)Locale locale, Model model) {
logger.info("Users page", locale);
ArrayList<User> users = userService.getUsers();
model.addAttribute("users", users);
return "listusers";
}
然后在后端中,路由此url的函数:
@RequestMapping(value = "/listusers")
List<User> getAllUser() {
Application.context = new ClassPathXmlApplicationContext("applicationContext.xml");
userService = (UserService) Application.context.getBean("userService");
List<User> users = userService.getUsers();
return users;
}
在此之后,后端UserDAO类将访问数据库。您可能需要查看您在前端发布到的URL。您正在使用相同的URL发布到前端UserDAO和后端UserController:WebService.getWebServiceUrl [编辑] 您有两个POST服务,即/user/add/,如果您在同一url上公开它们,则会发生冲突。可能您的后端将托管在另一个端口或另一台服务器上。您应该使用该url从前端访问后端服务 [编辑2]
是,对于listusers,您没有从前端拨打REST电话。您正在调用JavaAPI用户服务。但是对于add user,您正在再次从前端到后端进行REST呼叫您可以向我们展示您的前端部件吗?我的意思是,您如何呼叫spring服务我不应该这样做吗?