我有以下方法
public static <E> APIGatewayProxyResponseEvent generateResponse(E request, E response, int statusCode){
JSONObject result = new JSONObject();
result.put(Constants.REQUEST, request);
result.put(Constants.RESPONSE, response);
return new APIGatewayProxyResponseEvent()
.withBody(result.toString())
.withStatusCode(statusCode)
.withHeaders(Constants.commonHeaders);
}
我要走了 net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
什么时候 result.put(Constants.RESPONSE, response);
已执行
回应是
相应的类别为:
public class PhysicalMediaURL extends MediaURL {
private static final String IDENTIFIER_PREFIX = "images/I/";
public PhysicalMediaURL(String physicalId, String extension, MediaHostnameProvider mediaHostnameProvider) {
super("images/I/" + physicalId, extension, mediaHostnameProvider);
}
}
public abstract class MediaURL implements URL {
private final String identifier;
private final String extension;
private final MediaHostnameProvider mediaHostnameProvider;
public MediaURL(String identifier, String extension, MediaHostnameProvider mediaHostnameProvider) {
this.identifier = identifier;
this.extension = extension;
this.mediaHostnameProvider = mediaHostnameProvider;
}
public String getIdentifier() {
return this.identifier;
}
public String getExtension() {
return this.extension;
}
public String getDomainName() {
return this.mediaHostnameProvider.getMediaHostname(this.getExtension());
}
public String getURL() {
StringBuilder urlBuilder = new StringBuilder();
urlBuilder.append("https://");
urlBuilder.append(this.getDomainName());
urlBuilder.append('/');
urlBuilder.append(this.getIdentifier());
urlBuilder.append('.');
urlBuilder.append(this.getExtension());
return urlBuilder.toString();
}
public List<String> getStyleTags() {
return null;
}
}
其中physicalmediaurl的类型为:url,这是一个接口
public interface URL {
String getIdentifier();
String getDomainName();
String getExtension();
List<String> getStyleTags();
String getURL();
}
我有点被困在这个。。我需要帮助。
1条答案
按热度按时间lsmepo6l1#
首先,看起来您使用的json实现不像其他实现那样定期更新(您的异常来自net.sf.json)。我总是建议使用org.json实现,因为它会定期收到更新和错误修复。
在这种形式中使用jsonobject的大多数实现都使用基于bean的反射从对象中检索值。当您的对象位于继承层次结构中时,这并不总是您想要的,因为根据对象和jsonobject impl,它将从实现中提取不在更高级别类型(本例中为url)上的字段。
如果您真的想要一个泛型序列化函数,请使用类似jackson或gson的东西,它将允许您指定类型作为序列化的一部分。否则,请考虑在将对象传递给generateresponse函数之前,将其转换为更简单的对象,例如可以明确序列化的map<string,string>。
最后一点,jsonobject的泛型序列化是可行的,但是,它的性能可能比使用像jackson这样的专用高级序列化程序要差。它最好与显式put方法一起使用以生成简单对象。