forked from loafle/openapi-generator-original
update supporting JodaTime and Java8 DateTime
This commit is contained in:
parent
62b692da1d
commit
40400e3657
@ -121,6 +121,9 @@ public class JavaResteasyServerCodegen extends JavaClientCodegen implements Code
|
|||||||
importMapping.put("LocalDate", "org.joda.time.LocalDate");
|
importMapping.put("LocalDate", "org.joda.time.LocalDate");
|
||||||
importMapping.put("DateTime", "org.joda.time.DateTime");
|
importMapping.put("DateTime", "org.joda.time.DateTime");
|
||||||
|
|
||||||
|
supportingFiles.add(new SupportingFile("JacksonConfig.mustache",
|
||||||
|
(sourceFolder + '/' + invokerPackage).replace(".", "/"), "JacksonConfig.java"));
|
||||||
|
|
||||||
supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache",
|
supportingFiles.add(new SupportingFile("JodaDateTimeProvider.mustache",
|
||||||
(sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java"));
|
(sourceFolder + '/' + apiPackage).replace(".", "/"), "JodaDateTimeProvider.java"));
|
||||||
supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache",
|
supportingFiles.add(new SupportingFile("JodaLocalDateProvider.mustache",
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
package {{invokerPackage}};
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonGenerationException;
|
||||||
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||||
|
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
|
||||||
|
import com.fasterxml.jackson.datatype.joda.JodaModule;
|
||||||
|
import org.joda.time.DateTime;
|
||||||
|
import org.joda.time.LocalDate;
|
||||||
|
import org.joda.time.format.ISODateTimeFormat;
|
||||||
|
|
||||||
|
import javax.ws.rs.ext.ContextResolver;
|
||||||
|
import javax.ws.rs.ext.Provider;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@Provider
|
||||||
|
public class JacksonConfig implements ContextResolver<ObjectMapper> {
|
||||||
|
private final ObjectMapper objectMapper;
|
||||||
|
|
||||||
|
public JacksonConfig() throws Exception {
|
||||||
|
|
||||||
|
objectMapper = new ObjectMapper();
|
||||||
|
objectMapper.registerModule(new JodaModule() {
|
||||||
|
{
|
||||||
|
addSerializer(DateTime.class, new StdSerializer<DateTime>(DateTime.class) {
|
||||||
|
@Override
|
||||||
|
public void serialize(DateTime value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException {
|
||||||
|
jgen.writeString(ISODateTimeFormat.dateTimeNoMillis().print(value));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
addSerializer(LocalDate.class, new StdSerializer<LocalDate>(LocalDate.class) {
|
||||||
|
@Override
|
||||||
|
public void serialize(LocalDate value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException {
|
||||||
|
jgen.writeString(ISODateTimeFormat.date().print(value));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ObjectMapper getContext(Class<?> arg0) {
|
||||||
|
return objectMapper;
|
||||||
|
}
|
||||||
|
}
|
@ -1,44 +1,42 @@
|
|||||||
package {{apiPackage}};
|
package {{apiPackage}};
|
||||||
|
|
||||||
import com.sun.jersey.core.spi.component.ComponentContext;
|
|
||||||
import com.sun.jersey.spi.inject.Injectable;
|
|
||||||
import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider;
|
|
||||||
|
|
||||||
import javax.ws.rs.QueryParam;
|
|
||||||
import javax.ws.rs.WebApplicationException;
|
|
||||||
import javax.ws.rs.core.Context;
|
|
||||||
import javax.ws.rs.core.Response;
|
|
||||||
import javax.ws.rs.core.Response.Status;
|
|
||||||
import javax.ws.rs.core.UriInfo;
|
|
||||||
import javax.ws.rs.ext.Provider;
|
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import java.util.List;
|
import javax.ws.rs.ext.ParamConverter;
|
||||||
|
import javax.ws.rs.ext.ParamConverterProvider;
|
||||||
|
import javax.ws.rs.ext.Provider;
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import javax.ws.rs.WebApplicationException;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
|
|
||||||
@Provider
|
@Provider
|
||||||
public class JodaDateTimeProvider extends PerRequestTypeInjectableProvider<QueryParam, DateTime> {
|
public class JodaDateTimeProvider implements ParamConverterProvider {
|
||||||
private final UriInfo uriInfo;
|
|
||||||
|
|
||||||
public JodaDateTimeProvider(@Context UriInfo uriInfo) {
|
public static class JodaDateTimeConverter implements ParamConverter<DateTime> {
|
||||||
super(DateTime.class);
|
|
||||||
this.uriInfo = uriInfo;
|
@Override
|
||||||
|
public DateTime fromString(String string) {
|
||||||
|
try {
|
||||||
|
DateTime dateTime = DateTime.parse(string);
|
||||||
|
return dateTime;
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).
|
||||||
|
entity(string + " must be valid DateTime").build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Injectable<DateTime> getInjectable(final ComponentContext cc, final QueryParam a) {
|
public String toString(DateTime t) {
|
||||||
return new Injectable<DateTime>() {
|
return t.toString();
|
||||||
@Override
|
}
|
||||||
public DateTime getValue() {
|
}
|
||||||
final List<String> values = uriInfo.getQueryParameters().get(a.value());
|
|
||||||
|
|
||||||
if (values == null || values.isEmpty())
|
@Override
|
||||||
|
public <T> ParamConverter<T> getConverter(Class<T> type, Type type1, Annotation[] antns) {
|
||||||
|
if (DateTime.class.equals(type)) {
|
||||||
|
return (ParamConverter<T>) new JodaDateTimeConverter();
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
if (values.size() > 1) {
|
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).
|
|
||||||
entity(a.value() + " cannot contain multiple values").build());
|
|
||||||
}
|
|
||||||
|
|
||||||
return DateTime.parse(values.get(0));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,44 +1,42 @@
|
|||||||
package {{apiPackage}};
|
package {{apiPackage}};
|
||||||
|
|
||||||
import com.sun.jersey.core.spi.component.ComponentContext;
|
|
||||||
import com.sun.jersey.spi.inject.Injectable;
|
|
||||||
import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider;
|
|
||||||
|
|
||||||
import javax.ws.rs.QueryParam;
|
|
||||||
import javax.ws.rs.WebApplicationException;
|
|
||||||
import javax.ws.rs.core.Context;
|
|
||||||
import javax.ws.rs.core.Response;
|
|
||||||
import javax.ws.rs.core.Response.Status;
|
|
||||||
import javax.ws.rs.core.UriInfo;
|
|
||||||
import javax.ws.rs.ext.Provider;
|
|
||||||
import org.joda.time.LocalDate;
|
import org.joda.time.LocalDate;
|
||||||
import java.util.List;
|
import javax.ws.rs.ext.ParamConverter;
|
||||||
|
import javax.ws.rs.ext.ParamConverterProvider;
|
||||||
|
import javax.ws.rs.ext.Provider;
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import javax.ws.rs.WebApplicationException;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
|
|
||||||
@Provider
|
@Provider
|
||||||
public class JodaLocalDateProvider extends PerRequestTypeInjectableProvider<QueryParam, LocalDate> {
|
public class JodaLocalDateProvider implements ParamConverterProvider {
|
||||||
private final UriInfo uriInfo;
|
|
||||||
|
|
||||||
public JodaLocalDateProvider(@Context UriInfo uriInfo) {
|
public static class JodaLocalDateConverter implements ParamConverter<LocalDate> {
|
||||||
super(LocalDate.class);
|
|
||||||
this.uriInfo = uriInfo;
|
@Override
|
||||||
|
public LocalDate fromString(String string) {
|
||||||
|
try {
|
||||||
|
LocalDate localDate = LocalDate.parse(string);
|
||||||
|
return localDate;
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).
|
||||||
|
entity(string + " must be valid LocalDate").build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Injectable<LocalDate> getInjectable(final ComponentContext cc, final QueryParam a) {
|
public String toString(LocalDate t) {
|
||||||
return new Injectable<LocalDate>() {
|
return t.toString();
|
||||||
@Override
|
}
|
||||||
public LocalDate getValue() {
|
}
|
||||||
final List<String> values = uriInfo.getQueryParameters().get(a.value());
|
|
||||||
|
|
||||||
if (values == null || values.isEmpty())
|
@Override
|
||||||
|
public <T> ParamConverter<T> getConverter(Class<T> type, Type type1, Annotation[] antns) {
|
||||||
|
if (LocalDate.class.equals(type)) {
|
||||||
|
return (ParamConverter<T>) new JodaLocalDateConverter();
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
if (values.size() > 1) {
|
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).
|
|
||||||
entity(a.value() + " cannot contain multiple values").build());
|
|
||||||
}
|
|
||||||
|
|
||||||
return LocalDate.parse(values.get(0));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,44 +1,34 @@
|
|||||||
package {{apiPackage}};
|
package {{apiPackage}};
|
||||||
|
|
||||||
import com.sun.jersey.core.spi.component.ComponentContext;
|
|
||||||
import com.sun.jersey.spi.inject.Injectable;
|
|
||||||
import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider;
|
|
||||||
|
|
||||||
import javax.ws.rs.QueryParam;
|
|
||||||
import javax.ws.rs.WebApplicationException;
|
|
||||||
import javax.ws.rs.core.Context;
|
|
||||||
import javax.ws.rs.core.Response;
|
|
||||||
import javax.ws.rs.core.Response.Status;
|
|
||||||
import javax.ws.rs.core.UriInfo;
|
|
||||||
import javax.ws.rs.ext.Provider;
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import javax.ws.rs.ext.ParamConverter;
|
||||||
|
import javax.ws.rs.ext.ParamConverterProvider;
|
||||||
|
import javax.ws.rs.ext.Provider;
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
|
||||||
@Provider
|
@Provider
|
||||||
public class LocalDateProvider extends PerRequestTypeInjectableProvider<QueryParam, LocalDate> {
|
public class LocalDateProvider implements ParamConverterProvider {
|
||||||
private final UriInfo uriInfo;
|
|
||||||
|
|
||||||
public LocalDateProvider(@Context UriInfo uriInfo) {
|
public static class LocalDateConverter implements ParamConverter<LocalDate> {
|
||||||
super(LocalDate.class);
|
|
||||||
this.uriInfo = uriInfo;
|
@Override
|
||||||
|
public LocalDate fromString(String string) {
|
||||||
|
LocalDate localDate = LocalDate.parse(string);
|
||||||
|
return localDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Injectable<LocalDate> getInjectable(final ComponentContext cc, final QueryParam a) {
|
public String toString(LocalDate t) {
|
||||||
return new Injectable<LocalDate>() {
|
return t.toString();
|
||||||
@Override
|
}
|
||||||
public LocalDate getValue() {
|
}
|
||||||
final List<String> values = uriInfo.getQueryParameters().get(a.value());
|
|
||||||
|
|
||||||
if (values == null || values.isEmpty())
|
@Override
|
||||||
|
public <T> ParamConverter<T> getConverter(Class<T> type, Type type1, Annotation[] antns) {
|
||||||
|
if (LocalDate.class.equals(type)) {
|
||||||
|
return (ParamConverter<T>) new LocalDateConverter();
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
if (values.size() > 1) {
|
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).
|
|
||||||
entity(a.value() + " cannot contain multiple values").build());
|
|
||||||
}
|
|
||||||
|
|
||||||
return LocalDate.parse(values.get(0));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,44 +1,34 @@
|
|||||||
package {{apiPackage}};
|
package {{apiPackage}};
|
||||||
|
|
||||||
import com.sun.jersey.core.spi.component.ComponentContext;
|
|
||||||
import com.sun.jersey.spi.inject.Injectable;
|
|
||||||
import com.sun.jersey.spi.inject.PerRequestTypeInjectableProvider;
|
|
||||||
|
|
||||||
import javax.ws.rs.QueryParam;
|
|
||||||
import javax.ws.rs.WebApplicationException;
|
|
||||||
import javax.ws.rs.core.Context;
|
|
||||||
import javax.ws.rs.core.Response;
|
|
||||||
import javax.ws.rs.core.Response.Status;
|
|
||||||
import javax.ws.rs.core.UriInfo;
|
|
||||||
import javax.ws.rs.ext.Provider;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import javax.ws.rs.ext.ParamConverter;
|
||||||
|
import javax.ws.rs.ext.ParamConverterProvider;
|
||||||
|
import javax.ws.rs.ext.Provider;
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
|
||||||
@Provider
|
@Provider
|
||||||
public class LocalDateTimeProvider extends PerRequestTypeInjectableProvider<QueryParam, LocalDateTime> {
|
public class LocalDateTimeProvider implements ParamConverterProvider {
|
||||||
private final UriInfo uriInfo;
|
|
||||||
|
|
||||||
public LocalDateTimeProvider(@Context UriInfo uriInfo) {
|
public static class LocalDateTimeConverter implements ParamConverter<LocalDateTime> {
|
||||||
super(LocalDateTime.class);
|
|
||||||
this.uriInfo = uriInfo;
|
@Override
|
||||||
|
public LocalDateTime fromString(String string) {
|
||||||
|
LocalDate localDateTime = LocalDateTime.parse(string);
|
||||||
|
return localDateTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Injectable<LocalDateTime> getInjectable(final ComponentContext cc, final QueryParam a) {
|
public String toString(LocalDateTime t) {
|
||||||
return new Injectable<LocalDateTime>() {
|
return t.toString();
|
||||||
@Override
|
}
|
||||||
public LocalDateTime getValue() {
|
}
|
||||||
final List<String> values = uriInfo.getQueryParameters().get(a.value());
|
|
||||||
|
|
||||||
if (values == null || values.isEmpty())
|
@Override
|
||||||
|
public <T> ParamConverter<T> getConverter(Class<T> type, Type type1, Annotation[] antns) {
|
||||||
|
if (LocalDateTime.class.equals(type)) {
|
||||||
|
return (ParamConverter<T>) new LocalDateTimeConverter();
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
if (values.size() > 1) {
|
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).
|
|
||||||
entity(a.value() + " cannot contain multiple values").build());
|
|
||||||
}
|
|
||||||
|
|
||||||
return LocalDateTime.parse(values.get(0));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -5,12 +5,15 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.0'
|
|
||||||
providedCompile 'org.jboss.resteasy:resteasy-jaxrs:3.0.11.Final'
|
providedCompile 'org.jboss.resteasy:resteasy-jaxrs:3.0.11.Final'
|
||||||
providedCompile 'org.jboss.resteasy:jaxrs-api:3.0.11.Final'
|
providedCompile 'org.jboss.resteasy:jaxrs-api:3.0.11.Final'
|
||||||
providedCompile 'org.jboss.resteasy:resteasy-validator-provider-11:3.0.11.Final'
|
providedCompile 'org.jboss.resteasy:resteasy-validator-provider-11:3.0.11.Final'
|
||||||
providedCompile 'javax.annotation:javax.annotation-api:1.2'
|
providedCompile 'javax.annotation:javax.annotation-api:1.2'
|
||||||
providedCompile 'org.jboss.spec.javax.servlet:jboss-servlet-api_3.0_spec:1.0.0.Final'
|
providedCompile 'org.jboss.spec.javax.servlet:jboss-servlet-api_3.0_spec:1.0.0.Final'
|
||||||
|
compile 'org.jboss.resteasy:resteasy-jackson2-provider:3.0.11.Final'
|
||||||
|
|
||||||
|
// compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.4.1'
|
||||||
|
// compile 'joda-time:joda-time:2.7'
|
||||||
|
|
||||||
testCompile 'junit:junit:4.12',
|
testCompile 'junit:junit:4.12',
|
||||||
'org.hamcrest:hamcrest-core:1.3'
|
'org.hamcrest:hamcrest-core:1.3'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user