Преобразование пустых значений из Java bean в JSON - PullRequest
0 голосов
/ 07 июня 2018

Мой поток приведен ниже.

enter image description here В чем моя проблема:

Входной запрос json имеет несколько полей, установленных на "».Я хочу, чтобы в ответе json эти поля также были установлены на "".Вместо этого полям присваиваются значения null или 0.

Что мне нужно: Как мне установить поля в ответ на "" вместо нуля или 0?

Код:

Запрос JSON:

    {
    userID: "ABC",
    creationDate: "",
    noOfItems: "" 
}

Определение компонента:

class UserOrderDetails {
    private String userID;
    private LocalDate creationDate;
    private int noOfItems;

    public String getUserID() {
        return this.userID;
    }

    public void setUserID(String userID) {
        this.userID=userID;
    }
    public LocalDate getCreationDate() {
        return this.creationDate;
    }

    public void setCreationDate(LocalDate creationDate) {
        this.creationDate=userID;
    }   
    public int getNoOfItems() {
        return this.noOfItems;
    }

    public void setNoOfItems(int noOfItems) {
        this.noOfItems=noOfItems;
    }
}

Класс контроллера:

class UserOrderCreationController {
@RequestMapping(value = "/createUserOrder", method = RequestMethod.POST)
    public ResponseEntity<?> createUserOrder(@RequestBody UserOrderDetails userOrderDetails , @RequestHeader HttpHeaders headers) throws Exception{
    //Some business logic to handle the user Order
    return new ResponseEntity<UserOrderDetails>(userOrderDetails, HttpStatus.CREATED);
    }
}

Ответ:

{
    userID: "ABC",
    creationDate: null,
    noOfItems: 0 
}

ПРИМЕЧАНИЕ. Я не могу изменить LocalDate, int -типы данных CreationDate и noOfItems to String, поскольку они используются многими другими классами.

1 Ответ

0 голосов
/ 07 июня 2018

Для полей String, какое бы значение вы ни отправили, оно будет сохранено и будет возвращено, Для других типов данных, таких как DATE, Integer, при преобразовании значения JSON в JAVA, если значение равно Balnk ("") /null, объект-преобразователь преобразует его в null и сохраняет в БД, то же самое будет возвращено в ответ.Если вы хотите, чтобы в ответе было указано «», вы должны написать customSerializer, который в ответ преобразует ноль в «».Вам нужно аннотировать эти поля с помощью
@JsonSerialize (используя = ToStringSerializer.class)

ToStringSerializer.class, который нам нужно написать.

Обходной путь: у меня есть этот обходной путь, вы можете попробоватьи увидим.

открытый класс AssignNullSerializer2 extends JsonSerializer {

public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider)
        throws IOException, JsonProcessingException
{
    // any JSON value you want...
    if(value==null) {
    jgen.writeString("");
    }
}

} В ApplicationConfiguration добавьте приведенный ниже фрагмент.

    ObjectMapper mapper = new ObjectMapper();
DefaultSerializerProvider sp=new DefaultSerializerProvider.Impl();
sp.setNullValueSerializer(new AssignNullSerializer2());
mapper.setSerializerProvider(sp);

Он преобразует все нулевые значения вDTO'S / Response Objects to "" / Empty_String Я не нашел элемента управления, чтобы применить его к определенному полю.

...