2017-05-20 1 views
0

백엔드 이제 다음 코드에 의해 백엔드에 JSON 데이터를 게시하고있는 backend.I에 사용자 정보를 게시 할 수 있습니다 :포스트 JSON 내가 봄 부팅 응용 프로그램을 개발하고

@RestController 
    public class DataInsertController { 


     @RequestMapping(value = "data/api", consumes={MediaType.APPLICATION_JSON_VALUE},method = RequestMethod.POST) 
     public ResponseEntity<HostResponse> createAuthenticationToken(@RequestBody Host host) { 

      System.out.println(host.getName()); 

      return ResponseEntity.ok(new HostResponse("token")); 
     } 

    } 

내 Object 클래스는 같은

import java.io.Serializable; 

public class Host implements Serializable{ 

private static final long serialVersionUID = -8445943548965154778L; 


private String name; 
private String email; 
public Host(){ 
    super(); 
} 
    public Host(String name, String email) { 
     this.setName(name); 
     this.setEmail(email); 
    } 

public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public String getEmail() { 
    return email; 
} 
public void setEmail(String email) { 
    this.email = email; 
} 


} 

내 나머지 고객과의 면담 데이터로부터

{ 
"name": "user01", 
"email":"[email protected]" 
} 

같은 데이터를 게시하고 인쇄되지 않습니다 백엔드에서 에드. 어떤 도움을 주셔서 감사합니다.

+2

나는 일이 잘못 표시되지 않습니다를 해결할 것입니다,하지만 난이 소비 = {MediaType.APPLICATION_JSON_VALUE} 및 개체 클래스의 생성자처럼, 몇 가지 물건을 제거하는 것입니다. 그것없이 시도하고 그것이 작동하는지 말해주십시오. –

+0

사실'System.out.println (host.getName());'을 출력 할 때. nul을 출력합니다. 이유는 무엇입니까? Java 객체 값으로 수신 된 json 데이터를 검색하는 방법은 무엇입니까? – Ricky

+0

코드를 테스트합니다. 잘못된 건 없다. 그것은 작동합니다. 클라이언트 쪽 요청의 형식이 잘못되었을 수 있습니다. 공유 할 수 있습니까? – barbakini

답변

1

저는 json과 같은 게시물 본문을 얻는 데 효과적인 솔루션을 사용합니다. 당신이 문자열로 몸을 얻을 다음과 같이 ObjectMapper 사용하여 obejct (호스트 클래스)로 변환 할 수 있습니다 :

@RestController 
    public class DataInsertController { 


     @RequestMapping(value = "data/api", consumes={MediaType.APPLICATION_JSON_VALUE},method = RequestMethod.POST) 
     public ResponseEntity<HostResponse> createAuthenticationToken(@RequestBody Map<String,Object> hostMap) { 

      // handle json object exceptions to validate input 
      JSONObject jsonObject = new JSONObject(hostMap);    
      Host host = new ObjectMapper().readValue(jsonObject.toString() , Host.class); 

      System.out.println(host.getName()); 
      return ResponseEntity.ok(new HostResponse("token")); 
     } 
} 
당신은 다른 사람이 deserialise있는 필드를 알 수 없습니다 잭슨 주석과 클래스에 주석을 달 필요가
+0

스프링이 Jackson JSON 라이브러리를 사용하여 인스턴스를 JSON으로 자동 마샬링하기 때문에 필요하지 않다고 생각합니다. –

+0

예 필수적이지는 않지만 잘못된 바디 리턴 스프링 반환 오류 때문입니다. Jackson JSON 라이브러리를 사용하여 입력을 처리하고 입력 본문을 기반으로 적절한 응답을 반환 할 수 있습니다. – M2E67

1

:

@JsonCreator 
    public Host((@JsonProperty("name")String name,@JsonProperty("email") String email) { 
     this.setName(name); 
     this.setEmail(email); 
    } 
1

당신은 당신이 데이터를 얻을 @RequestBody를 사용하는 것처럼 신체 부위 대신 헤더에 데이터를 전송하는 데이터를 전송하는 우체부를 사용하는 경우.

이 문제 (내 IDE없이)

관련 문제