题:
如何使用Spring Expression Language检查2个布尔属性是否为真?
例如,检查单个属性是否为true将使用以下语法:
例
@ConditionalOnExpression("${property.from.properties.file}")
Run Code Online (Sandbox Code Playgroud)
检查的语法是property1 == true && property2 == false
什么?属性可能具有不同的值.
来自类似问题的答案:如何在使用@ConditionalOnProperty或@ConditionalOnExpression时将两个字符串连接在一起并执行检查,如下所示:
连接解决方案
@ConditionalOnExpression("'${com.property1}${com.property2}'=='value1value2'")
Run Code Online (Sandbox Code Playgroud)
对于那些阅读该代码的人来说,这种语法似乎令人困惑,这似乎是一个hacky解决方案.有一些边缘情况解决方案也会失败.我想找到检查两个单独属性而不连接值的正确方法.
注意: 同样要清楚,答案不是你可以从我看到的内容中轻松搜索到的.这似乎是一个非常简单的答案,但事实证明这是相当难以捉摸的.
我正在编写一个自定义的Spring Boot启动程序,其他开发人员将放入他们的应用程序,这个启动程序包含开箱即用的控制器和UI屏幕.
这些UI屏幕是国际化的,i18n键/值在包文件中:com/foo/wherever/i18n.properties
.
我想确保在启动时加载我的启动器时,这些i18n.properties在应用程序中MessageSource
自动可用,以便我的UI页面工作(通过普通的Spring Controller + ViewResolver + View实现呈现),而app开发人员不必指定这个归档自己.
换句话说,他们应该能够将我的启动器添加到他们的运行时类路径中,并且一切"正常工作"而无需配置任何东西.
现在,我发现应用程序开发人员可以创建自己的src/main/resources/messages.properties
文件并手动配置其他消息文件application.properties
:
spring.messages.basename = messages, com.foo.wherever.i18n
Run Code Online (Sandbox Code Playgroud)
这将有效.
但是,这需要以下两个方面:
spring.messages.basename
属性 - 它不是自动的.和messages.properties
在其应用程序类路径中拥有自己的文件.如果messages.properties
文件不存在,spring.messages.basename
甚至不起作用.即使他们不关心i18n,这仍然是必需的 - 不可取.我想我可以将我的i18n.properties文件移动到启动器.jar中的类路径:/messages.properties文件中,但这似乎不是一个好的解决方案:如果app dev有自己的messages.properties文件只有一个它们将被读取,导致消息值丢失.
看起来好像春天启动MessageSourceAutoConfiguration应该有一个概念CompositeMessageSource
是在一个或多个迭代MessageSource
实例可用(并且Order
在Spring的ApplicationContext ED)和该所使用的DispatcherServlet的.这将允许任何启动器仅通过MessageSource
在其自动配置中声明a来为可用消息做出贡献
有可能做我的要求吗?应用程序开发人员最"亲切"的解决方案是什么?
我正在Spring Boot Java应用程序中为服务类构建单元测试.
服务类对返回JSON响应的REST API服务进行外部调用.我正在用Mockito嘲笑这个电话.我在mockserver响应中硬编码JSON.
这是一种不好的做法,在单元测试中使用硬编码的JSON吗?如果JSON结构发生变化,那么测试失败就是我的推理.有没有更好的,最好的做法在哪里这样做?
下面的示例代码段:
实际的代码是实用的,我只是编辑了这个片段,为了简洁起见,所以如果您发现任何错误,请发表评论:
public class UserServiceTest extends TestCase {
private static final String MOCK_URL = "baseUrl";
private static final String DEFAULT_USER_ID = "353";
UserService classUnderTest;
ResponseEntity<Customer> mockResponseEntity;
MockRestServiceServer mockServer;
@Mock
RestTemplate mockRestTemplate;
public void setUp() throws Exception {
super.setUp();
classUnderTest = new UserRestService();
mockRestTemplate = new RestTemplate();
mockServer = MockRestServiceServer.createServer(mockRestTemplate);
ReflectionTestUtils.setField(classUnderTest, "restTemplate",
mockRestTemplate);
ReflectionTestUtils.setField(classUnderTest, "userSvcUrl",
MOCK_URL);
}
public void testGetUserById() throws Exception {
mockServer.expect(requestTo(MOCK_URL + "/Users/" + DEFAULT_USER_ID)).andExpect(method(HttpMethod.GET))
.andRespond(withSuccess(
"{\n" +
" \"UserCredentials\": {\n" + …
Run Code Online (Sandbox Code Playgroud) 我有一个简单的Vaadin Web应用程序,我正在寻找一个简单的图形API,只需要处理最少量的数据(最多几百个数据点),并允许我在Vaadin面板对象中显示简单的2d图形.
出于安全原因,我需要它是一个Java API而不是Google图表之类的外部服务.
有没有人有任何好的建议?
编辑:我选择使用Invient Charts(用于HighCharts的Vaadin附加包装器)因为我已经拥有HighCharts许可证.如果我没有许可证,我可能会使用基于GWT的简单API,例如gchart
编辑2012年3月29日:使用Invient Charts推出了Vaadin应用程序的生产版本.对最终结果非常满意.您可以使用纯Java代码控制High Charts功能的几乎所有方面.有几件事情有点像"hacky",比如格式化点的显示方式和鼠标悬停在你需要传递匿名javascript函数作为字符串的数据点上.初始设置也有点冒险; 我必须覆盖我的ApplicationServlet以确保正确导入javascript库并将它们放在项目结构中的正确位置并未完全记录.总的来说,将图形集成到我的Vaadin应用程序中相对无痛.强烈推荐.
编写正在搜索等于 0 或为 null 的标志的 Grails 动态查找器的最佳方法是什么?
例子
class Book {
String title
Date releaseDate
String author
Boolean paperback
Integer isArchived
}
Run Code Online (Sandbox Code Playgroud)
isArchived 可以为空。所以查询要么寻找 isArchived = 0 要么如果它是 null 它也希望它在结果中。
编辑:乍一看这个问题似乎我什至没有尝试也没有看文档。我向你保证,我一直在研究和尝试许多不同的事情。
此外,是的,数据库中的布尔标志不应该为空,但此时无法更改表。在这种情况下,开发人员依赖于在域对象中默认将标志的值设置为 0。虽然这在大多数情况下有效,但在某些情况下,标志被设置为 null。
我使用动态查找器尝试了许多不同的方法来执行此操作,但似乎不可能在动态查找器中两次使用同一列。
我会接受答案,“不,这不可能使用动态查找器,只需使用 createCriteria() 方法。” 我只是想确定这是否不可能。
我有一个Vaadin应用程序,我正在尝试显示一个PDF,我从本地读取PDF格式,存储在我的Web服务器上.
setCaption(mainApp.getMsg("app.subwindow.help.title"));
setHeight("750px");
setWidth("1000px");
setModal(true);
setDraggable(false);
setResizable(false);
setBorder(Window.BORDER_MINIMAL);
setScrollable(true);
VerticalLayout vl = new VerticalLayout();
vl.setSpacing(true);
vl.setSizeFull();
Embedded pdf = new Embedded("test", new StreamResource(new StreamSource() {
public InputStream getStream() {
InputStream is = PdfWindow.class.getClassLoader().getResourceAsStream("Lifestyle-Tracker-Promo.pdf");
return is;
}
}, "file.pdf", mainApp));
pdf.setType(Embedded.TYPE_BROWSER);
pdf.setMimeType("application/pdf");
pdf.setSizeFull();
vl.addComponent(pdf);
addComponent(vl);
Run Code Online (Sandbox Code Playgroud)
我试图在页面上的嵌入式PDF阅读器中显示PDF.该代码适用于IE8和Firefox,但它拒绝与Chrome的嵌入式PDF阅读器配合使用.有没有其他人遇到过这个问题并有任何建议?
我尝试了多种解决方案,但它无法正常工作.
当我转到/ page/2时,它不起作用.
我正在我的主题的index.php中执行自定义查询.
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} elseif ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
$args = array(
'post_type' => array('post', 'music', 'videos'),
'post_status' => 'publish',
//'meta_key' => 'featured',
//'meta_value' => '1',
'posts_per_page' => 10,
'orderby'=>'date',
'order'=>'DESC',
'paged' => $paged
);
query_posts($args);
Run Code Online (Sandbox Code Playgroud)
这是我的网站的链接:我的网站的主页
此页面无效(抛出404) - 无效的页面(格式为mywebsite/page/2 /)
刚刚意识到这个页面2工作 - 工作的页面(格式 - mywebsite.com/?page=2)
我有由字母,数字和特殊字符(电子邮件地址)组成的唯一可变长度字符串列表.列表中的每个电子邮件地址都是唯一的.
我需要单向散列函数(我不需要能够从生成的数字中检索原始值),它将使用salt散列字符串并生成12位数字.
我想确保唯一性,因此我将检查先前生成的值列表以检测冲突,然后在发生冲突时生成新数字.可预测性不是问题.
理想情况下,我希望这个函数用Groovy编写,但Java也可以.
我有以下代码:
def getMyFile(){
File myFile = new File("/path/to/file.xsl")
try{
response.setHeader "Content-disposition", "attachment; filename=${myFile.name}"
response.contentType = new MimetypesFileTypeMap().getContentType(myFile )
response.outputStream << myFile .bytes
response.outputStream.flush()
}
catch (e){
println(e.message)
}
}
Run Code Online (Sandbox Code Playgroud)
访问此控制器操作时,我希望浏览器下载 excel 文件。
该代码不会在控制台中创建任何错误,但文件未正确下载。
java ×6
spring ×3
grails ×2
groovy ×2
spring-boot ×2
vaadin ×2
charts ×1
grails-orm ×1
gwt ×1
hash ×1
junit ×1
mockito ×1
pagination ×1
pdf ×1
random ×1
spring-el ×1
unit-testing ×1
web ×1
wordpress ×1