我也在使用Spring使用AngularJS和WildFly开发Web应用程序。
我的问题是我要疯了,因为注释@requestBody似乎工作错误。
这是我的服务:
@ResponseBody
@RequestMapping(value = "/keyuser", method = RequestMethod.POST,
consumes = "application/json")
public KeyProfileUserSummary updateEmployee(@RequestBody KeyProfileUserSummary keyUser) {
return null;
}
Run Code Online (Sandbox Code Playgroud)
这是我的对象KeyProfileUserSummary的成员:
private Integer id;
private String login;
private String password;
private String firstname;
private String lastname;
private UserRole userRole;
Run Code Online (Sandbox Code Playgroud)
我不知道发生了什么,但是我已经用其他类型的对象测试了该服务,并且效果很好,但是在定义KeyProfileUserSummary时,它不起作用,我收到错误400错误请求。我已经测试过将@RequestBody设置为“ Object”,以便至少可以看到即将发生的事情,并且从前端开始,我得到以下信息:
{id=3, login=aa, password=a, firstname=Martin, lastname=Müller, userRole=ROLE_USER}
Run Code Online (Sandbox Code Playgroud)
UserRole是一个枚举。需要澄清的一点很重要,就是KeyProfileUserSummary只是KeyProfileUser的摘要版本,但是由于我在响应中得到了所有链接的元素,因此我决定发送此较轻的类。使用KeyProfileUser进行的测试非常完美,我在Angular端获得了JSON对象并将其发送回去。
在Angular方面,我对该对象不做任何事情。只需将其接收到列表中,然后按编辑按钮即可将列表中的元素发送回去。这是我发送的方式:
res = $http.post("url.../keyuser", user);
Run Code Online (Sandbox Code Playgroud)
问题是我可以使所有内容与KeyProfileUser完美配合,但是由于数据库确实非常庞大且引用很多,所以我决定切换到这个较轻的类,但是现在我只收到此ERROR 400 BAD REQUEST ...而且我要吊死自己:P
谢谢你的帮助!
在我们的 Spring Boot 应用程序中,我们在 Quality 环境中进行了第一次部署,现在我们希望简化定义 URL 以接受来自 FrontEnd 应用程序的请求。
我们用 maven 构建我们的应用程序,然后我们用命令执行它
java -Dspring.profiles.active=prod -jar myapp-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
我们认为我们可以在application.properties/application-prod.properties
文件上设置 URL ,但这不起作用,因为在执行时它为空。另一种解决方法是-Dspring.profiles.active=prod
在运行应用程序时以某种方式获取我们传递的参数,然后获取一个或另一个 URL 但这似乎有点脏......
那你们会怎么做呢?在谷歌上找不到任何东西给我留下了深刻的印象,显然人们有不同的解决方法,或者我以错误的方式搜索。
编辑 跨源信息:这就是我们最初实现它的方式。
@CrossOrigin(origins = BasicConfiguration.CLIENT_URL)
Run Code Online (Sandbox Code Playgroud)
这就是我们现在想要使用 Spring Security 的过滤器来做到这一点的方式
public class CorsFilter implements Filter, ApplicationContextAware {
@Value("${urlServer}")
private String urlServer;
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", urlServer);
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, …
Run Code Online (Sandbox Code Playgroud)