我对这一切都很陌生。这就是问题所在。我有一个RESTAPI,使用Spring Boot连接到MySQL。访问我的API的URL是http://localhost/videogamereview/review/(id)。每当我访问这个URL时,我都会按预期获得JSON对象。
我还有一个单独的angular项目,它通过自己的路径连接到此API。例如:HTTP:localhost:8080/angular2/#!/应该调用API,但是我从浏览器收到404响应。
Spring配置文件:
package com.init;
import java.util.Properties;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@ComponentScan(basePackages = "com")
@EnableTransactionManagement
public class MvcConfiguration extends WebMvcConfigurerAdapter {
private static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/videogamereviews?verifyServerCertificate=false&useSSL=true";
private static final String DATABASE_USERNAME = "root";
private static final String DATABASE_PASSWORD ="random";
private static final String HIBERNATE_DIALECT = "org.hibernate.dialect.MySQLDialect";
private static final String HIBERNATE_SHOW_SQL = "true";
private static final String ENTITYMANAGER_PACKAGES_TO_SCAN = "com.model";
private static final String HIBERNATE_HBM2DDL_AUTO = "create-drop";
// private static final String HIBERNATE_HBM2DDL_AUTO = "update";
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(DATABASE_DRIVER);
dataSource.setUrl(DATABASE_URL);
dataSource.setUsername(DATABASE_USERNAME);
dataSource.setPassword(DATABASE_PASSWORD);
return dataSource;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); // you USUALLY want this
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("GET");
config.addAllowedMethod("PUT");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource());
sessionFactoryBean.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);
sessionFactoryBean.setHibernateProperties(hibernateProperties());
return sessionFactoryBean;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", HIBERNATE_DIALECT);
properties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL);
properties.put("hibernate.hbm2ddl.auto", HIBERNATE_HBM2DDL_AUTO);
return properties;
}
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory().getObject());
return transactionManager;
}
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/css/**").addResourceLocations("/resources/");
}
}
Spring我的控制器:ReviewController。Java语言
package com.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.model.Review;
import com.service.ReviewService;
@RestController
@RequestMapping(value = "review")
@CrossOrigin(origins="http://localhost:8080")
public class ReviewController {
@Autowired
private ReviewService rs;
@RequestMapping(value="/",method = RequestMethod.GET)
public List<Review> getReviews() {
return rs.getReviews();
}
@RequestMapping(value = "{id}", method = RequestMethod.GET)
public Review showReviewWithId(@PathVariable long id) {
return rs.getReviewById(id);
}
@RequestMapping(value = "{id}", method = RequestMethod.PUT)
public String updateReviews(@PathVariable long id, @RequestBody Review review) {
rs.updateReview(id,review);
return "review updated";
}
@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable long id) {
rs.deleteReview(id);
return "review deleted";
}
@RequestMapping(value="/",method = RequestMethod.POST)
public String postReview(@RequestBody Review review) {
rs.saveReview(review);
return "review created";
}
}
angular setup: app.js
'use strict';
var VideogameReviewsApp = angular.module('VideogameReviewsApp', ['ngRoute','ngResource']).
config(['$routeProvider', function ($routeProvider) {
$routeProvider.
when('/', { controller: ReviewCtrl, templateUrl: 'review.html" target="_blank">html' }).
otherwise({ redirectTo: '/' });
}]);
VideogameReviewsApp.factory('Review', function ($resource) {
return $resource('http://localhost/videogamereviews/review/:id.json', { id: '@id' },
{ update: { method: 'PUT' } });
});
var ReviewCtrl = function ($scope,Review) {
alert("haha");
$scope.reviews = Review.query();
};
在浏览器标题部分,我可以看到正在访问的URL是http://localhost/videogamereviews/review.json.那么为什么我得到一个404
回答提前感谢!艾希礼
您的url有冒号(:),这是导致问题的原因。只需在浏览器中粘贴您的资源uri(在浏览器控制台中检查有关响应的信息)或使用postman即可。从spring控制器获得的GET请求应如下所示:
我还考虑localhost映射到localhost:{app server portno}.(即localhost:8080),上下文根是视频游戏视图。
根据审查,控制器审查应通过http://localhost/review具有给定id的审查应该可以通过http://localhost/review/YOUR_REVIEW_ID
所以你必须从请求url的末尾删除. json。
如果http://localhost/videogamereview/review/(id)返回预期的JSON,那么在Angular脚本中使用它。这意味着当您想要检索资源时,在uri中删除. json
。http://localhost/videogamereview/review/(id)返回JSON资源,但http://localhost/videogamereview/review/(id). json不是。
问题内容: 我想创建一个应用程序,当超级用户单击链接时,用户应该获得通知或类似pdf的内容,以便他们在屏幕上访问。 用例:当教师想与他的学生共享PDF时,他应该能够通知他的学生有关可下载的pdf的信息,并且必须提供一个链接来做到这一点。 问题答案: 当您想在CakePHP中实现此功能(因此我假设它是基于Web的应用程序)时,用户必须打开“活动”页面才能接收推送消息。 值得一看前两个答案,但也只需考
问:在支持服务器的java应用程序中,是否可以在Spring使用websocket将数据从服务器发送到客户端,而不创建另一个客户端? 互联网上几乎所有关于spring中websocket的文章都展示了如何在控制器中定义方法来处理请求。当他们用两个注解@MessageMapping("/news ")、@SendTo("/topic/news ")定义一个函数时,所有的神奇似乎都发生了。单凭这个方法
我有一个在生产中工作的密钥斗篷,我需要我的用户登录到一个使用react native开发的移动应用程序,使用该密钥斗篷。到目前为止,我使用的正常登录流程通过应用内浏览器作为AppAtuh,但现在我收到了一个用户的请求,说在应用程序,同时登录。 > 我使移动登录的Keycloak主题对移动应用程序UI进行了如此多的加密,以至于可以将其作为普通屏幕使用react WebView打开。 其次,这种思想适
问题内容: 是否有从客户端浏览器获取时区的可靠方法?我看到了以下链接,但我想要一个更强大的解决方案。 使用JavaScript自动检测时区 JavaScript中的时区检测 问题答案: 查看此存储库pageloom很有帮助 下载jstz.min.js并将功能添加到您的html页面 然后从您的显示代码调用此函数
问题内容: 以下是我的tls后端: 密钥是使用以下两行生成的: 当我启动tls服务器并使用浏览器(https://example.com:8443)访问站点时, 在 忽略浏览器警告 后 ,我得到了预期的结果: 到目前为止,一切都很酷。 现在,当我将浏览器指向http://example.com:8443(注意使用的是http, 而不是 https)时,我得到了Firfox的以下结果(Chrome浏
我正在进行一个SpringBoot项目,该项目使用常规MVC机制来公开REST API。 在一个特定的GET API中,我得到了406HTTP响应。 下面是我的控制器方法的样子: AnalysisDetailResponse是使用Lombok创建的(在其他API的情况下,Lombok可以完美地工作) 我已经验证了整个响应对象的内容,它似乎是完美的。然而,响应总是406。 我需要JSON格式的响应,