2016-06-21 4 views
1

다음 컨트롤러 코드가 있습니다.springboot jackson이 올바른 json 객체 대신 배열을 반환합니다.

@RequestMapping(value = "/testService/test", produces = MediaType.APPLICATION_JSON_VALUE) 
public HttpEntity<TestBean> test(@RequestParam Map<String,String> testReq)  { 
... 
List<Test> objList=testRepository.test(); 
testBean.setObjects(objList); 
... 
return new ResponseEntity<TestBean>(testBean, HttpStatus.OK); 
} 

TestBean가

@Entity 
@Table(name="TEST") 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class Test implements Serializable{ 
private static final long serialVersionUID = -5319848003675140194L; 
@JsonIgnore 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name="TEST_ID") 
Integer testId; 
... 

시험을 다음과 같이 정의된다

private List<Test> objects; 

테스트 클래스 아래와 같이 (게터/세터 및 기타 속성) 테스트 객체의리스트를 보유하고있다() 메소드 이하와 같이 정의된다.

@Query(value="SELECT ...", nativeQuery=true) 
List<Test> test(); 

내가 볼 JSON 출력은 객체 목록이 그런 식 대신이

{"testId":1,"testName":"Test name"} 
를 같이 출력되는 인 이유

{"requestId":"testRequestId","objects":[[1,"Test name"],[2,"Test name2"]],"status":"Success"} 

다른 상황이 괜찮되는 아래, 내 질문은 같다

내가 사용하고있는 또 다른 유사한 객체의 경우 예상대로 출력이 올바른 json 형식으로 표시됩니다.

실제 코드를 복사하지는 않았지만 이름이 변경된 코드를 입력 했으므로 코드에 나타날 수있는 구문 오류는 무시하십시오.

누군가 출력에 적절한 json을 얻으려면 어떻게 조언 할 수 있습니까?

+0

우리는 여러분의'Test'와'TestBean' 클래스에 대해 더 많은 정보를 필요로합니다. 이 클래스 중 하나에 Jackson 주석이 포함되어 있습니까? 배열 직렬화는'BeanAsArraySerializer'가 사용될 때 발생합니다. 이것은'@JsonFormat' 어노테이션이있을 때 활성화 될 수 있습니다. – g00glen00b

+0

그럼에도 불구하고'testId' 필드에'@JsonIgnore' 주석을 추가 했으므로 (응답에 다른 번호가 아닌 한) ID가 배열에 있다는 것은 매우 이상합니다. – g00glen00b

+0

이미 언급 한 것 외에 Test 클래스에는 특별한 주석이 없습니다. 그리고 아래는 TestBean에 대한 유일한 주석입니다. '@JsonPropertyOrder ({ "requestId", "objects"}) public class TestBean은 ResourceSupport {' – Divyesh

답변

1

문제가 있습니다. 문제는 내가 다른 객체를 위해 생성 된 JPA 저장소 클래스를 사용하고 있었다는 것입니다. Test 객체를위한 새로운 JPA 저장소 클래스를 만들었고 이제는 제대로 작동합니다. 올바르게 json 출력을 얻고 있습니다. 감사합니다.

관련 문제