小编Car*_*shf的帖子

@RequestBody无法在Rest服务上使用

我也在使用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

谢谢你的帮助!

java rest spring json angularjs

5
推荐指数
1
解决办法
5071
查看次数

如何在 Prod/Dev 环境中处理 CORS URL?

在我们的 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)

spring cors spring-boot jakarta-ee

4
推荐指数
1
解决办法
1699
查看次数

标签 统计

spring ×2

angularjs ×1

cors ×1

jakarta-ee ×1

java ×1

json ×1

rest ×1

spring-boot ×1