Код: Выделить всё
@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)
@FieldDefaults(level=AccessLevel.PRIVATE)
public class PaymentControllerCreateTest {
@LocalServerPort
int port;
String baseUrl = "http://localhost";
static RestTemplate restTemplate = null;
@BeforeAll
public static void init() {
restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
}
@BeforeEach
public void setup() {
baseUrl += ":" + port + "/payment";
}
@Test
@Sql(statements="delete from payment_line_items", executionPhase=Sql.ExecutionPhase.AFTER_TEST_METHOD)
@Sql(statements="delete from payment", executionPhase=Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void testCreateBasicPayment() throws Exception {
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "token");
HttpEntity
entity = new HttpEntity(payment, headers);
ResponseEntity response = restTemplate.postForEntity(baseUrl, entity, Payment.class);
assert response.getStatusCode().is2xxSuccessful();
Payment created = response.getBody();
// these assertions pass, but amount and currency code are set in the POSTed object
assert created.getCardInfo() == null;
assert created.getAmount().compareTo(payment.getAmount()) == 0;
assert created.getCurrencyCode().equals(payment.getCurrencyCode());
// these assertions fail, and the fields are either autogenerated or set in the service
assert created.getId() != null;
assert created.getTransId() != null;
}
}
< /code>
Соответствующие биты платежа: < /p>
@Entity @Table(name="payment")
@JsonInclude(Include.NON_NULL)
@Data
@FieldDefaults(level=AccessLevel.PRIVATE)
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Payment {
@Id
@GeneratedValue
@JsonProperty(access=Access.READ_ONLY)
UUID id;
@JsonProperty(access=Access.READ_ONLY)
String transId;
@NotNull
@JsonSerialize(using=BigDecimalSerializer.class)
BigDecimal amount;
@NotNull
String currencyCode;
...
}
Код: Выделить всё
@Service
@NoArgsConstructor
public class PaymentService {
@Autowired
PaymentRepository repository;
public Payment createPayment(Payment payment) {
// do business logic, submit payment, etc.
payment.setTransId(tid);
payment.setCardInfo(null); // set payment info to null so it isn't included in response
return repository.saveAndFlush(payment);
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... te-why-are