При вызове службы REST для сохранения целого числа я заметил, что нулевое значение превращается в 0, и я не знаю, почему это происходит. Это мой класс
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "CompanyPreference") public class CompanyPreference {
public CompanyPreference() {
super();
}
@XmlElement
private Integer preferenceValueNumber;
public void setPreferenceValueNumber(Integer preferenceValueNumber) {
this.preferenceValueNumber = preferenceValueNumber;
}
public Integer getPreferenceValueNumber() {
return preferenceValueNumber;
}
}
а это мой веб-сервис
@POST
@SecureIt
@Consumes(value = { MediaType.APPLICATION_JSON })
@Produces(value = { MediaType.APPLICATION_JSON })
@Path("/{companyCode}/{companyType}/preferences/update")
@ApiOperation(value = "Update Company Preferences", response = DefaultResponse.class, authorizations = { @Authorization(value = "Bearer") })
public Response savePreferences(@ApiParam(value = "Company Code", required = true) @PathParam("companyCode") String companyCode,
@ApiParam(value = "Company Type", required = true) @PathParam("companyType") String companyType,
@ApiParam(value = "Array of Company Preference objects", required = true) CompanyPreference[] companyPreferences,
@Context ContainerRequestContext crc) throws ResponseError {
for(int i = 0; i < companyPreferences.length; i++) {
System.out.println(companyPreferences[i].getPreferenceValueNumber());
}
}
Несмотря на то, что preferenceValueNumber является целым числом, а не примитивным целым числом, он все равно превращается в 0, когда мой запрос выглядит так ...
[
{ preferenceValueNumber: "" }, //this returns 0
{ preferenceValueNumber: 30 } //this returns 30 as it should
]
Как сохранить исходное значение null?
Вы можете использовать обычный int и использовать другое значение в качестве специального флага. Допустимы ли отрицательные числа для этого параметра? Если нет, просто возьмите -1 ...
Я бы ожидал, что здесь будет сгенерировано исключение, а не нулевое значение ... Если ваш API ожидает целое число и находит String, он не должен преобразовывать его в null или 0, он должен ответить «400 Bad Request».




Исходное значение не равно нулю, это пустая строка