【问题标题】:Send JSON data from angular 7 UI to Spring Controller将 JSON 数据从 Angular 7 UI 发送到 Spring Controller
【发布时间】:2019-10-23 14:47:58
【问题描述】:

我想将 JSON 数据从 Angular 7 UI 发送到 Spring MVC 控制器,并将数据保存到 mysql db。

我可以将数据从 Spring Controller 发送到 Angular,但我似乎找不到相反的方法。 谁能帮我提供一些参考资料或代码。

在 .ts 文件中

this.http.post("someurl/addData",event.newData).subscribe(response => { console.log(response);}) 

在 Spring 控制器中:-

@RequestMapping(value="/addData",method=RequestMethod.GET) public void addDataintoDb(PojoClass pojo){ System.out.println(pojo.start); } 

【问题讨论】:

    标签: angular spring-mvc


    【解决方案1】:

    改正下面的方法

    @RequestMapping(value="/addData",method=RequestMethod.GET) public void 
    addDataintoDb(PojoClass pojo){ System.out.println(pojo.start); }
    

    而不是 GET 将其更改为 POST。

    并添加 @RequestBody => addDataintoDb(@RequestBody PojoClass pojo)

    @RequestMapping(value="/addData",method=RequestMethod.POST) public void 
    addDataintoDb(@RequestBody PojoClass pojo){ System.out.println(pojo.start); }
    It will work.
    

    默认角度帖子正文为 json,如果您的请求正文类型有任何不匹配,请在下面使用:-

     let headers = new HttpHeaders({ 'Content-Type': 'application/json' });
     this.http.post("someurl/addData",event.newData,{ headers: headers 
     }).subscribe(response => { console.log(response);})
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 这似乎对我不起作用,你能帮我解决这个问题吗?
      • 在问题中发布您的代码并更新它,不要将它放在 cmets 中
      【解决方案3】:

      假设您的控制器 (api):

      // http get call with Long id

      @GetMapping("/find-by-id")                            
      public Response getEmployeeById(@RequestParam("id") Long id) {
          return employeeServiced.getEmployeeById(id);
      }
      

      // http post call with Object,

      Java Object 属性和 JSON Object 属性必须相同才能自动绑定。

      @PostMapping("/save")
      public Response saveEmployee(@RequestBody(required = false) EmployeeEntity reqObj) {
          return employeeServiced.saveEmployee(reqObj);
      }
      

      java Orm 实体:

      import org.springframework.stereotype.Component;
      import lombok.Getter;
      import lombok.Setter;
      
      @Getter
      @Setter
      @Entity
      public class EmployeeEntity  {
      
         @Id
         @GeneratedValue(strategy = GenerationType.AUTO)
         private long id;
      
         private String empName;
      
         private String gender; 
      
      }
      

      服务:

      @Service
      @Transactional
      public class EmployeeService {
      
      
        @Autowired
        UserDao userDao;
      
      
        public void saveEmployee(EmployeeEntity user){
          userDao.add(user);
       }
      
      
       public User findByIdPost(long id){
          return userDao.getById(id);
       }
      
       public User getEmployeeById(long id){
          return userDao.getEmployeeById(id);
       }
      
      }
      

      在 Angular Call api 中(将 Json 数据发送到服务器端):

      在 Angular 组件中(用于获取请求前置数据发送)

            getEmployeeById(id: number):void{
             this.employeeService.getEmployeeById(id).subscribe(
              res => {
              if(res.success){
                console.log(res);
              },
              err => {
                console.log(" error: ", err);
              })
            }
      

      在 Angular 服务中:

            getEmployeeById(id: any) {
              return this.http.get<any>('http://localhost:8090/employee/find-by-id'`, {
                params: new HttpParams().set('id', id)
              })
            }
      

      在Angular中,调用api(将Json对象数据发送到服务器端):

      在 Angular 组件中(用于获取请求对象数据发送)

            OnSaveEmployee(): void {
              let empObj = {          // For Object binding Json Object property and java Entity property must be same name.
              "empName":"IMRAN"
              "gender":"Male"
              }
      
              this.employeeService.saveEmployee(empObj).subscribe(
                res => {
                if(res.success){
                  console.log(res)
                 }else{
                   console.log("getPatientDemographyInfo error:",res);
                 }
                },
                err => {
                  console.log("Priority list error: ", err);
                }
              )
            }
      

      在 Angular 服务中:

           saveEmployee(empObj:any): Observable<any> {
              return this.http.post<any>("http://localhost:8090/employee/save", 
              empObj).pipe(
                map((data: any) => data
              ));
            }
      

      完成项目here

      【讨论】:

        【解决方案4】:

        问题似乎是您从 Angular 端发送 POST 请求,但已将 Spring 控制器的方法注释为接受 GET。所以,我假设你得到一个 404 / Not Found,因为 Spring 应用程序中没有处理 GET 的方法。

        要解决这个问题,请更改

        @RequestMapping(value="/addData",method=RequestMethod.GET) public void addDataintoDb(PojoClass pojo){ System.out.println(pojo.start); }

        @RequestMapping(value="/addData",method=RequestMethod.POST) public void addDataintoDb(PojoClass pojo){ System.out.println(pojo.start); }

        【讨论】:

          猜你喜欢
          • 2019-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-15
          相关资源
          最近更新 更多