RestController에 대한 간단한 테스트가 있는데, $[1].parent_id
은 Integer 프리미티브가 아닌 객체로 Long을 반환 할 것으로 기대합니다. . 다른 테스트에서강제로`.andExpect (jsonPath()`가 long/long을 int 대신에 int 대신 사용하도록하는 방법)
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@WebAppConfiguration
public class TransactionServiceControllerTest {
@Before
public void setup() throws Exception {
this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
// I copy this from my RestController class
this.transactions = Arrays.asList(
new Transaction(100d, "car", null),
new Transaction(100d, "table", 12L)
);
}
@Test
public void readSingleBookmark() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/transaction/"))
.andExpect(content().contentType(contentType)) // ok
.andExpect(jsonPath("$", hasSize(2))) // ok
//omitted
andExpect(jsonPath("$[1].parent_id",is(this.transactions.get(1).getParentId())));
} //assertion fail
Expected: is <12L>
but: was <12>
결과 :
Expected: is <12L>
but: was <2147483650L> //return Long instead int
이 내 JacksonConfiguration
,536,913입니다 :parent_id
긴 번호 범위에 있으며> 정수 범위 (2147483650L 등)의 경우는 긴 반환합니다 63,210
@Configuration
public class JacksonConfiguration {
@Bean
@Primary
public ObjectMapper objectMapper() {
final ObjectMapper objectMapper = new ObjectMapper();
//supposed to be this is the magic trick but it seems not..
objectMapper.enable(DeserializationFeature.USE_LONG_FOR_INTS);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_ABSENT);
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
return objectMapper;
}
}
그리고 내 POJO
public class Transaction {
private double ammount;
private String type;
private Long parentId;
public Transaction(Double ammount, String type, Long parentId) {
//omitted
}
//setter and getter omitted
}
MyRestController
@RestController
@RequestMapping("transaction")
public class TransactionServiceController {
@RequestMapping(method = RequestMethod.GET)
List<Transaction> getTransaction() {
return
Arrays.asList(
new Transaction(100d, "car", null),
new Transaction(100d, "table", 12L)
);
}
}
그리고 Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class,args);
}
}
질문에 대한 대답 중 하나가 받아 들여지면 원한다면 [accept it] (http://stackoverflow.com/help/accepted-answer)을 참조하십시오. –
오늘 (1 년 후) 나는 단지 내가 틀린 버튼을 눌렀다는 것을 깨닫는다. 나는 대답을 수락하는 것이'''위로 버튼''이라고 생각했다. 그러나 이것은''''Stackoverflow new user welcome how to''에서 철저히 설명 된''check button''입니다. 많은 사람들은 샘 브레너 (SamBrenner)에게 우호적 인 (거의 무시한) 신호에 감사드립니다. – slawalata
걱정할 필요가 없습니다. 건배! ;-) –