处理Spring REST分离的前端/后端发布请求

问题描述 投票:0回答:2

我正在尝试使用Spring用于后端/ webservice和前端的2个不同项目来开发RESTful 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...
}

还有一个UserDAO类(用于通过Hibernate 4访问数据库)和用于业务流程的UserManager。 然后是一个UserController:

@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;
    }

}

现在,对于前端项目,我实现了相同的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);
    }
}

获取请求的工作原理:我可以显示我的用户列表。 但是我的问题是,我无法通过发布请求将数据从前端部分传递到后端Web服务部分...我一直在尝试几种解决方案,但我认为其他地方有些问题。

我对JavaEE应用程序领域有点陌生。 有人可以帮助我或指导我找到解决方案吗?

spring web-services rest java-ee
2个回答
0
投票

在前端UserDAO中:

public ArrayList<User> getUsers() {
    ArrayList<User> user = new RestTemplate().getForEntity(WebService.getWebServiceUrl() + "listusers", ArrayList.class).getBody();
    return (user);
}

此代码允许通过uri“ / listuser”请求服务器。 在frontEnd 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";
    }

然后在后端路由此网址的函数:

 @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类访问数据库。


0
投票

您可能希望在前端查看发布到的URL。 您使用相同的URL张贴到前端(UserDAO)和后端(UserController):WebService.getWebServiceUrl()

[编辑]您有两个POST服务,例如/ user / add /,如果将它们公开在相同的url上,则发生冲突。 您的后端可能将托管在另一个端口或另一台服务器上。 您应该使用该URL从前端访问后端服务。

[编辑2]是,对于列表用户,您不是从前端进行REST调用。 您正在调用JAVA API userService。 但是对于添加用户,您将再次从前端到后端进行REST调用

© www.soinside.com 2019 - 2024. All rights reserved.