我尝试使用Play2/Scala WS API向服务端点发送HTTP POST请求.由于HTTP POST正文中没有要发送的参数,我该如何使用它发送
WS.url("http://service/endpoint).post()
Run Code Online (Sandbox Code Playgroud)
我试过post()没有争论,但它给了我一个错误.
无法将单元实例写入HTTP响应.尝试定义可写[单位]
你能帮忙吗?
提前致谢...
我正在开发一个使用OAuth进行身份验证的应用,但我在处理OAuth回调时遇到了一些问题.
认证
我的应用程序有一个webview作为登录屏幕,我有一个URL来加载我的webview中的身份验证表单.让我们说网址是:
https://myoauthhost.com/oauth/auth?response_type=code&client_id=XXXXXXX&redirect_uri=YYYYYYYY&scope=ZZZZZZZZZZ
Run Code Online (Sandbox Code Playgroud)
在auth活动(AuthActivity.java)中,我有以下内容:
String authURL = https://myoauthhost.com/oauth/auth?response_type=code&client_id=XXXXXXX&redirect_uri=YYYYYYYY&scope=ZZZZZZZZZZ
myWebView.loadUrl(authURL);
Run Code Online (Sandbox Code Playgroud)
在manifest.xml中,我有以下oauth回调处理:
<activity
android:name=".AuthActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="authprovider"
android:scheme="auth" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
问题
在webview中使用此url(使用loadURL()方法)会重定向到另一个包含REAL OAUTH WEB FROM的 URL (应该在webview中加载).问题是此重定向会自动启动Android中的意图选择:由于URL应由Web浏览器处理,因此Android允许您选择手机上可用的Web浏览器之一来打开该URL.
由于这不是我想要的,我必须包含以下代码,以便在webview中处理重定向但不启动Web浏览器(或其他):
myWebView.setWebViewClient(new WebViewClient());
Run Code Online (Sandbox Code Playgroud)
因此,使用此代码,重定向将在"webview"中处理,并显示登录屏幕.
然后我可以输入凭证(例如:通过Twitter的oauth),但是当完成身份验证时,会收到回叫,但之后应该处理应该处理回调的活动(配置为接收清单中的回调的AuthActivity).相反,我让webview显示一条消息,说明无法找到url回调(在我们的例子中:authprovider:// auth/XXX?xxx = yyy,如清单中所配置).
原因可能是以下代码:
myWebView.setWebViewClient(new WebViewClient());
Run Code Online (Sandbox Code Playgroud)
之前介绍的,告诉Android webview处理所有事情.所以现在,由于回调网址不是网址,因此无法处理它,甚至无法启动可以处理它的意图.
问题
我怎么解决这个问题 ?我应该能够让活动处理回调,但不要让webview尝试加载它.
任何帮助,将不胜感激
提前致谢
我一直在深入研究Play2!Scala文档,关于为用户请求实现身份验证/授权的可能方法,我必须说我有点迷失.我想了解更多有关如何通过Play2!Scala支持的REST服务对移动设备发送的请求进行身份验证/授权的信息.
首先,Play2/scala似乎有很多auth-modules:例如t2v的Play20-auth.但问题是,这些解决方案基于在客户端存储cookie.是对的吗 ?这在纯粹的Web透视图中是有意义的:请求从浏览器发送,服务器可以在客户端上存储cookie等.
现在,如果我有一个原生移动应用程序(在IOS或Android上),我只是调用由Play2!Scala应用程序支持的REST服务.在这种情况下,我没有使用浏览器,因此服务器无法在客户端应用程序上存储cookie.
我还可以使用像t2v的Play20-auth这样的模块进行授权/认证吗?
处理这类事情的最佳做法是什么?
任何帮助真的很感激,提前谢谢,
我最近购买了最新版本的Intellij创意(在75%的折扣期间),顺便说一句,这真的很棒.
我有一个问题:scala支持似乎被打破了.我已经使用SBT插件安装了scala支持插件.我还安装了Play!2框架支持插件,但是只要我在IDE中打开一个scala文件,就会占用我cpu资源的近300%,我无法弄清楚如何解决这个问题.
有没有人在他们的IDE上遇到过这个问题?
我正在尝试包装ActionBar导航微调器的文本内容(我正在使用ActionBar Sherlock).似乎我的微调器占用了下拉列表中包含的项目的宽度.
如何使微调器中的选定项目根据其宽度"包裹"?可以在GMaps动作条旋转器中找到一个示例.
android spinner android-layout android-spinner actionbarsherlock
我目前正在玩Play 2.0(Scala).我必须承认这很有趣.我有一个与数据库操作异常有关的问题.
假设我将Car作为一个域类,并且我对其中一个字段有一个完整性约束,让我们说模型,以便在db中我不能有两(2)行具有相同的模型名称:
case class Car(id: Pk[Long], name: String, model: String)
Run Code Online (Sandbox Code Playgroud)
我试图在数据库中插入一条记录,如下所示:
def create(car: Car): Option[Long] = {
DB.withConnection { implicit connection =>
try {
SQL("insert into cars (name, model) values ({name},{model}").on("name" -> car.name, "model" -> car.model).executeInsert()
} catch {
case e: Exception => {
Logger.debug(e.getMessage())
None
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我没有像前面的代码那样捕获异常,那么当我从我的控制器调用此方法时,模型中的数据已经存在于数据库中,我抛出以下异常:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'Enzo' for key 'model'
Run Code Online (Sandbox Code Playgroud)
有没有办法捕获MySQLIntegrityConstraintViolationException而不是Exception,以便我可以对可能出错的地方进行细粒度控制,然后为我的用户提供更简洁的反馈(例如在浏览器或移动设备上)?
这是处理与数据库相关的操作和异常的最佳方法,还是每个人都使用的最佳实践?
提前致谢,
我想在 Clojure 中处理服务器发送的事件流。有谁知道一个小型客户端库可以做到这一点吗?
我期待找到类似https://github.com/stalefruits/gniazdo 的东西,它适用于Websockets,但适用于SSE。
我找不到任何东西,并且不再维护可能是一个很好的候选人的唯一库https://github.com/clojurewerkz/ssese
提前致谢 ...
我目前正试图绕过Spring Security OAuth2中访问授权过程的批准/拒绝步骤,因为应该记住先前授权的访问(针对特定的client_id和user_id)并允许将OAuth应用程序重定向到客户端应用程序没有每次询问用户他的批准.
<version.spring-security>3.2.0.RELEASE</version.spring-security>
<version.spring-security-oauth>1.0.5.RELEASE</version.spring-security-oauth>
Run Code Online (Sandbox Code Playgroud)
所以我有一个AccessConfirmationController,它具有/ oauth/confirm_access端点的映射:
@RequestMapping("/oauth/confirm_access")
public ModelAndView getAccessConfirmation(@ModelAttribute final AuthorizationRequest clientAuth)
{
final ClientDetails client = this.clientDetailsService.loadClientByClientId(clientAuth.getClientId());
final TreeMap<String, Object> model = Maps.newTreeMap();
model.put("auth_request", clientAuth);
model.put("client", client);
return new ModelAndView("access_confirmation", model);
}
Run Code Online (Sandbox Code Playgroud)
非常经典的处理访问确认方式.
现在我知道我必须检查(在此方法的某处)当前经过身份验证的用户(Principal)是否先前已批准访问权限,如果是,我们应该只检索用户关联的令牌,并且可能只是通过redirect_uri向他发送令牌.
Spring Security中有一个允许令牌检索的内部端点:
@FrameworkEndpoint
@RequestMapping(value = "/oauth/token")
public class TokenEndpoint extends AbstractEndpoint {
@RequestMapping
public ResponseEntity<OAuth2AccessToken> getAccessToken(Principal principal,
@RequestParam(value = "grant_type", required = false) String grantType,
@RequestParam Map<String, String> parameters) {
// the logic here
}
}
Run Code Online (Sandbox Code Playgroud)
如何从我的控制器中调用此框架端点?它甚至是最好的方式(〜最佳实践?)吗?
提前致谢,
我已经将一个应用程序从完整的Hibernate功能迁移到基于JPA/Hibernate的应用程序,我的JPA映射存在问题.
我们设法使用orm.xml来映射我们的实体.一切都很好,直到我不得不处理元素集合.实际上,我有一个名为User的实体,它有一个嵌入式地图(地图集合称为首选项).所以我们有类似的东西:
public class User {
private Long id;
private Map<String, String> preferences;
}
Run Code Online (Sandbox Code Playgroud)
在我们的完全休眠版本中,会生成PREFERENCE(ID,name,value)表.但是当我们尝试将其迁移到JPA时,我们使用了以下映射:
<element-collection name="preferences" target-class="java.lang.String" fetch="LAZY">
<map-key-class class="java.lang.String" />
<map-key-column name="[name]" />
<column name="[value]" />
<collection-table name="PREFERENCE">
<join-column name="ID" />
</collection-table>
</element-collection>
Run Code Online (Sandbox Code Playgroud)
并生成一个新的User_Preferences表.即使我在xml配置中指定了name ='PREFERENCES'属性,我也无法将元素集合指向现有的表PREFERENCES.
你有过这种情况吗?真的很感激任何帮助.
非常感谢guyz,
我在Scala中有一个与占位符语法相关的问题.所以我有一个简单的数字列表:
myList = List(13, 24, 10, 35)
Run Code Online (Sandbox Code Playgroud)
首先,我试着像这样过滤这个列表
myList.filter(_ => (_ % 5) == 0)
Run Code Online (Sandbox Code Playgroud)
并且编译器抱怨因为它无法推断参数类型:
error: missing parameter type for expanded function ((x$2) => x$2.$percent(5))
Run Code Online (Sandbox Code Playgroud)
好吧,没问题:我为参数添加了一个类型
myList.filter(_:Int => _ % 5 == 0)
Run Code Online (Sandbox Code Playgroud)
现在编译器给了我这个:
identifier expected but integer literal found.
someNumbers.filter(_:Int => _ % 5 == 0)
^
Run Code Online (Sandbox Code Playgroud)
你们知道为什么我有这个奇怪的错误吗?我真的不明白......
提前致谢,
我目前正在我的项目上实现推送通知功能.我设法使用xtify这样做,因为它是与Google的C2DM服务交互的好包装.
现在,正如大多数人可能知道的那样:xtify使用名为xid的标识符进行通信并将通知推送给用户.所以在我的主要活动中(用户打开应用程序时显示的第一个),我有以下代码:
XtifySDK.start(getApplicationContext(), Constants.XTIFY_APP_KEY,
Constants.C2DM_SENDER_ID);
String xid = XtifySDK.getXidKey(getApplicationContext());
if (!"".equals(xid) && xid != null) {
App.setXid(xid);
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:
我应该将它存储在数据库中(使用用户信息)吗?并在每次用户连接时检查他/她是否已经有相关的xid,如果没有,请致电
String xid = XtifySDK.getXidKey(getApplicationContext());
生成一个新的? - 有没有办法让Android模拟器获取通知?
先谢谢你们,
android push-notification android-emulator android-c2dm xtify
我想将以下代码段中的内部函数调用转换为使用#()宏的内部函数调用:
(let [m {:a 3, :b 2, :c 4, :x 9, :y 0, :z 5}]
(into (sorted-map-by (fn [key1 key2]
(compare [(get m key2)]
[(get m key1)]))) m))
Run Code Online (Sandbox Code Playgroud)
我对如何实现这一点感到有点困惑.
android ×4
scala ×4
clojure ×2
android-c2dm ×1
anorm ×1
callback ×1
client ×1
collections ×1
hibernate ×1
http-post ×1
ide ×1
jpa-2.0 ×1
mapping ×1
oauth-2.0 ×1
orm ×1
osx-leopard ×1
placeholder ×1
rest ×1
scala-2.8 ×1
spinner ×1
spring ×1
spring-mvc ×1
web-services ×1
webview ×1
xtify ×1