prosource

스프링 MVC 컨트롤러에 JSON 데이터 전달

probook 2023. 3. 14. 21:43
반응형

스프링 MVC 컨트롤러에 JSON 데이터 전달

스프링 MVC 컨트롤러에 JSON 문자열을 보내야 합니다.단, 폼바인딩은 없습니다.컨트롤러 클래스에 플레인 JSON 데이터를 전송하기만 하면 됩니다.아래 코드와 같이 컨트롤러 메서드에 jQuery AJAX를 호출합니다.

$.ajax ({
    url: "./save",
    type: "POST",
    data: JSON.stringify(array),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(){
        alert("success ");
    }
});

하지만 Controller 메서드로 검색하려면 어떻게 해야 하나요?(주의: 폼 제출이 아닌 플레인 JSON 데이터입니다).

다음 종속성 추가

<dependency>
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.7</version>
</dependency>

<dependency>
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.7</version>
</dependency>

다음과 같이 요청 수정

$.ajax({ 
    url:urlName,    
    type:"POST", 
    contentType: "application/json; charset=utf-8",
    data: jsonString, //Stringified Json Object
    async: false,    //Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation
    cache: false,    //This will force requested pages not to be cached by the browser          
    processData:false, //To avoid making query String instead of JSON
    success: function(resposeJsonObject){
        // Success Message Handler
    }
});

컨트롤러 측

@RequestMapping(value = urlPattern , method = RequestMethod.POST)
public @ResponseBody Person save(@RequestBody Person jsonString) {

   Person person=personService.savedata(jsonString);
   return person;
}

@RequestBody- Json 객체를 java로 변환
@ResponseBody- Java 객체를 json으로 변환

  1. HTML

    $('#save').click(function(event) {        
        var jenis = $('#jenis').val();
        var model = $('#model').val();
        var harga = $('#harga').val();
        var json = { "jenis" : jenis, "model" : model, "harga": harga};
        $.ajax({
            url: 'phone/save',
            data: JSON.stringify(json),
            type: "POST",           
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Accept", "application/json");
                xhr.setRequestHeader("Content-Type", "application/json");
            },
            success: function(data){ 
                alert(data);
            }
        });
    
        event.preventDefault();
    });
    
    1. 컨트롤러

      @Controller
      @RequestMapping(value="/phone")
      public class phoneController {
      
          phoneDao pd=new phoneDao();
      
          @RequestMapping(value="/save",method=RequestMethod.POST)
          public @ResponseBody
          int save(@RequestBody Smartphones phone)
          {
              return pd.save(phone);
          }
      
    2. 다오

      public Integer save(Smartphones i) {
          int id = 0;
          Session session=HibernateUtil.getSessionFactory().openSession();
          Transaction trans=session.beginTransaction();
          try {
              session.save(i);   
              id=i.getId();
              trans.commit();
          }
          catch(HibernateException he){}
          return id;
      }
      

JSON 오브젝트를 JSON.stringify(jsonObject)로 문자열화하여 컨트롤러로 수신할 수 있습니다.

컨트롤러에서 javax.json을 사용하여 이를 변환하고 조작할 수 있습니다.

.jar를 다운로드하여 프로젝트 libs에 추가하고 Json Object를 Import합니다.

json 객체를 작성하려면

JsonObjectBuilder job = Json.createObjectBuilder();
job.add("header1", foo1);
job.add("header2", foo2);
JsonObject json = job.build();

String에서 읽으려면

JsonReader jr = Json.createReader(new StringReader(jsonString));
JsonObject json = jsonReader.readObject();
jsonReader.close();

언급URL : https://stackoverflow.com/questions/18524524/passing-json-data-to-a-spring-mvc-controller

반응형