Spring 处理弹簧支撑分离的前端/后端post请求

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

我正试图用Spring开发一个RESTfulWebService,使用后端/webservice和前端的两个不同项目

在后端项目中,我实现了该模型

@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服务我不应该这样做吗?