我有一个受Spring Security和OAuth2保护的@Controller,我试图让我的用户上传一个文件:
@Controller
@RequestMapping(value = "/api/image")
public class ImageController {
@PreAuthorize("hasAuthority('ROLE_USER')")
@RequestMapping(value = "/upload", method = RequestMethod.PUT)
public @ResponseBody Account putImage(@RequestParam("title") String title, MultipartHttpServletRequest request, Principal principal){
// Some type of file processing...
System.out.println("-------------------------------------------");
System.out.println("Test upload: " + title);
System.out.println("Test upload: " + request.getFile("file").getOriginalFilename());
System.out.println("-------------------------------------------");
return ((Account) ((OAuth2Authentication) principal).getPrincipal());
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试上传文件和标题时,我得到以下异常.我将Content-Type标头设置为multipart/form-data.
java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: SecurityContextHolderAwareRequestWrapper[ FirewalledRequest[ org.apache.catalina.connector.RequestFacade@1aee75b7]]
at org.springframework.web.servlet.mvc.method.annotation.ServletRequestMethodArgumentResolver.resolveArgument(ServletRequestMethodArgumentResolver.java:84)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:75)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:156)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:117)
Run Code Online (Sandbox Code Playgroud)
如何在Spring Security后面上传文件?似乎请求永远不会变成MultiPartHttpServerRequest,所以它不起作用?
如果我更改我的方法签名以获取@RequestParam MultipartFile,那么我会得到一个例外:
DEBUG DefaultListableBeanFactory - Returning cached …Run Code Online (Sandbox Code Playgroud) 我HttpClient在一个Android应用程序中使用4.1,并试图让我的应用程序的API请求被其中一个"你需要登录或支付wifi"屏幕拦截.
我想弹出一个允许用户登录的webview.
我一直试图拦截httpClient中的重定向,但我没有成功.
这就是我目前正在尝试的:
this.client = new DefaultHttpClient(connectionManager, params);
((DefaultHttpClient) this.client).setRedirectStrategy(new DefaultRedirectStrategy() {
public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) {
boolean isRedirect = Boolean.FALSE;
try {
isRedirect = super.isRedirected(request, response, context);
} catch (ProtocolException e) {
Log.e(TAG, "Failed to run isRedirected", e);
}
if (!isRedirect) {
int responseCode = response.getStatusLine().getStatusCode();
if (responseCode == 301 || responseCode == 302) {
throw new WifiLoginNeeded();
// The "real implementation" should return true here..
}
} else {
throw new …Run Code Online (Sandbox Code Playgroud) 如何在整个屏幕重定向中保持GridView的滚动位置(它充满了搜索结果)?
我在片段中有GridView,当我旋转屏幕时,它会跳回到列表的顶部.
为了使它更加棘手,在横向模式下,我的GridView有3列..在纵向模式下它有2列.
我似乎无法弄清楚如何保持片段的GridView滚动到屏幕方向改变时应该接近的位置.
Play商店更新应用时设备上的工作流程是什么?如果用户同时使用该应用程序会发生什么?
我问,因为我们遇到了一些无法找到String ID的崩溃,当我们查看APK时,两个版本中的String资源都可用 - 但崩溃中报告的十六进制ID可以在OLD apk中找到而不是在NEW一.这很奇怪.
这导致我们认为Play商店可能在应用程序运行时更新了应用程序的文件和资源,然后当它查找字符串资源以加载某些东西时,它使用了内存中的旧ID,当然也没有找到它在新更新的文件中..导致ResourceNotFound异常.
怎么可能?它甚至可能吗?我想不会,除了我们查看APK并且崩溃中的ID与旧资源ID匹配而不是我们刚刚推送的新ID.
我正在尝试设计一个接受信用卡号码的字段的输入类型.
我一直在使用inputType ="number" - 但这不会让拥有硬件键盘的人碰到空格键......当他们这样做时会跳转到活动中的另一个字段.
我想允许用户在他们想要的时候使用他们号码中的空格,或者至少是这样做,以便当我只允许数字时,如果硬件键盘用户占用空间,则不会留下信用额度卡号EditText.
理想情况下,我可以实现一些接口并拥有自己的自定义inputType,但我不确定是否可行.
我们有来自Google IO的Jelly Bean Galaxy Nexus,并安装了Android SDK的所有最新更新 - 但我们无法在Intellij IDEA的设备上使用USB调试.
我们将项目设置为使用4.1 SDK等编译.没有运气.有谁知道如何在新的Jelly Bean Galaxy Nexus上进行USB调试?
(编辑)这是在运行OS X 10.7.4的Mac上尝试的 - 所以理论上驱动程序应该不是问题吗?
在亚马逊AppStore中,您可以分发Google Play风格的应用程序和为Fire Phone和Fire TV量身定制的应用程序.为了做到这一点,你生成了两个不同的二进制文件(它们实际上可能完全不同,应该完全被认为是两个不同的应用程序).
创建二进制文件后,您需要通过Amazon AppStore将它们分发到正确的设备.这就是问题所在 - 因为所有二进制文件都需要具有相同的包名称.
使用Crashlytics跟踪具有相同包名的两个不同应用的首选方法是什么?
我尝试使用此处的说明设置自定义程序包名称,以便向Crashlytics报告不同的程序包 - 但是,即使在强制执行多次崩溃并观察SDK上载报告后,自定义程序包名称也从未出现在Crashlytics中.
我已在我的应用程序中包含AccountManager代码,以使用户能够在其"设置"应用程序中创建和管理其帐户.
我在帐户验证器定义中的"accountPreferences"首选项文件中进行了链接,并且选项在"设置">"帐户">"我的应用程序"屏幕中正确显示.当我点击其中一个,而不是获取我链接的活动时,我得到:
01-14 14:47:27.304: ERROR/AndroidRuntime(27708): FATAL EXCEPTION: main
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ContextImpl.startActivity(ContextImpl.java:944)
at android.app.ContextImpl.startActivity(ContextImpl.java:931)
at android.preference.Preference.performClick(Preference.java:967)
at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:215)
Run Code Online (Sandbox Code Playgroud)
我在PreferenceScreen中的意图定义为:
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.myapp.android"
android:targetClass="com.myapp.android.activities.AccountForwardingActivity"/>
Run Code Online (Sandbox Code Playgroud)
并且目标活动也按照您的预期定义,除了intent-filter之外没有特殊标志来匹配该操作(我还列出了其他自定义操作).
<activity android:name=".activities.AccountForwardingActivity"
android:theme="@style/Theme.MyApp"
android:launchMode="singleTask">
<intent-filter>
<action android:name="com.myapp.android.PAYMENT_TYPES"/>
<action android:name="com.myapp.android.ADDRESS_LIST"/>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何将从Settings.apk启动的此意图标记为新任务?
settings preferenceactivity android-preferences accountmanager
我正在使用外部GPS,因为它们更准确.我已经解决了蓝牙连接,但现在我陷入了大量的NMEA格式化消息.
看起来,因为你可以从内置的GPS堆栈中获取NMEA,所以必须有一种方法来获得给定NMEA消息的位置.
如何将我的NMEA消息转换为有用的Location对象?
android ×7
crashlytics ×1
debugging ×1
file-upload ×1
gps ×1
gridview ×1
httpclient ×1
location ×1
nmea ×1
oauth-2.0 ×1
orientation ×1
settings ×1
spring ×1
wifi ×1