【发布时间】:2016-10-10 17:40:11
【问题描述】:
我正在使用 Spring-boot 和 Angular 2;前端和后端在不同的端口上运行。当我使用 Advanced REST Client(谷歌浏览器插件)检查 URL 时,http://localhost:4000/user/register 得到 404,当我在前端输入信息时没有任何反应。
网络服务配置:
@Configuration
public class CorsConfig {
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest)req;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "origin, x-requested-with, accept, Authorization, Content-Type");
response.setHeader("Access-Control-Max-Age", "3600");
if (!request.getMethod().equals("OPTIONS")) {
try {
chain.doFilter(req, res);
} catch (IOException e) {
System.out.println("IO Exception in CorsFilter: "+e);
e.printStackTrace();
} catch (ServletException e) {
System.out.println("Servlet Exception is CorFilter "+e);
e.printStackTrace();
}
}
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
}
以上是我如何配置后端。
我正在尝试注册一个新的user(Angular 2)
@Injectable()
export class RegisterService {
constructor (private http:Http) { }
sendUser (newUser: RegisterModel) {
let url = "http://localhost:4000/user/register";
let header = new Headers({'Content-Type': 'application/json'});
return this.http.post(url, JSON.stringify(newUser),{headers: header});
}
}
它是组件:
@Component ({
moduleId: module.id,
selector: 'register',
templateUrl: './register.html'
})
export class RegisterComponent {
newUser: RegisterModel = new RegisterModel();
constructor (private registerService: RegisterService){
}
onSubmit() {
this.registerService.sendUser(this.newUser).subscribe(
data => {
this.newUser = new RegisterModel();
console.log("New user was created.")
},
error => console.log(error)
);
}
}
安心服务
@RestController("/user")
public class UserController {
@Autowired
UserService userService;
@RequestMapping(value = "/register", method = RequestMethod.POST)
public User registerUser(@RequestBody User user){
System.out.println("YAY-----------"+user.getFirstName());
return userService.save(user);
}
}
什么都没有打印出来,也没有给出错误。
在我的 application.properties 我有
server.port=4000
页面呈现,但后端似乎没有响应。
如果有人想看,我也将其发布在 GIT 中。
---------------------更新1--------
我已将我的 SecurityConfig 更新为:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/").permitAll()
.anyRequest().authenticated().and()
.formLogin().loginPage("/").permitAll().and()
.logout().permitAll();
http.authorizeRequests().antMatchers("/user/register")
.permitAll().anyRequest().anonymous();
http.authorizeRequests().antMatchers("/")
.permitAll().anyRequest().authenticated();
http.formLogin().loginPage("/")
.permitAll().and().logout().permitAll();
}
}
2)我还删除了frontend目录下的pom file。
结果:当我使用Advanced REST client(谷歌浏览器插件)时,我现在得到一个The requested URL can't be reached。
在 GIT 上更新了它。
【问题讨论】:
-
你的项目在 github 上的父 pom 包含错误。 (1) type 必须是“pom”,而不是“war”。 (2) 第 56 行包含使 xml 无效的垃圾文本“rc.6”。 + 单元测试在编译时失败 (RequestDemoApplicationTests.java)
-
+ 你的 angular/npm 项目还继承了 spring boot 并定义了 spring-boot-plugin(+后端项目中的那个),这导致 spring boot 寻找 2 个主要类并将其扔到 build时间:“无法找到主要课程”。解决方案:你的前端项目是一个javascript项目,为什么它有一个带有spring-boot依赖的pom?
-
在出现错误之前,您的项目的 pom 中有很多需要修复的地方。当然,您没有使用 maven 构建项目,而只是从 intellij 构建/运行它?
-
+ 你的 application.properties(在 github 上)不包含 server.port=4000
-
我修复了所有问题,以便构建。然后我能够启动它(“mvn spring-boot:run”+“npm start”)。我发布了您的问题的答案。
标签: angular spring-boot