2015-10-15 5 views
1

Я новичок в JAX-RS, и я хочу обслуживать свой список предметов как JSON. Моя модель сущность-то вроде этого:JAX-RS @Produces: как настроить JSON?

public class Entity { 
    private String name; 
    private Date date; 
    private Float number; 
} 

Это, как я вызова службы:

@Path("/entities") 
public class EntitiesController { 
    @GET 
    @Produces({"application/json"}) 
    public List<Entity> getEntities() { 
     return EntityDAO.entitiesList(); 
    } 
} 

Однако дата не отформатирован, но отображается в виде длинной.

This Ответ показывает, как отформатировать дату, используя JsonSerializer. Если я продлю JsonSerializer, тогда где я помещаю этот подкласс в свой проект?

+0

Почему вы думаете, что это происходит потому, что атрибут не определен? Jaxrs [должен] (http://stackoverflow.com/a/13979349/446554) просто сериализует его в json, используя 'null'. –

+0

Кроме того, для форматирования даты разделите его на свой вопрос. (Вы также можете найти [this] (http://stackoverflow.com/a/11233594/446554).) –

+0

@CoryKlein Я узнал, что getter для 'number' возвращал' float' вместо 'Float' , именно это и вызывало ошибку. Во всяком случае, меня больше интересует настройка JSON по названию. – dabadaba

ответ

0

я понял, является решением себя:

Под новый serializers пакет я создал CustomJsonDateSerializer класс, который будет делегирована ответственность форматирования date атрибутов благодаря @JsonSerialize(...) аннотацию.

Так что я изменил мой Entity класс, добавив, что аннотацию наверх поля:

@JsonSerialize(using = CustomJsonDateSerializer.class) 
private Date date; 

И это содержание CustomJsonDateSerializer:

package serializers; 

import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import com.fasterxml.jackson.core.JsonGenerationException; 
import com.fasterxml.jackson.core.JsonGenerator; 
import com.fasterxml.jackson.databind.JsonSerializer; 
import com.fasterxml.jackson.databind.SerializerProvider; 

public class CustomJsonDateSerializer extends JsonSerializer<Date> { 
    @Override 
    public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) 
      throws IOException, JsonGenerationException { 
     SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyy"); 
     String format = formatter.format(value); 
     jgen.writeString(format); 
    } 
} 
Смежные вопросы