小编ana*_*ocs的帖子

Spring Boot SpEL ConditionalOnExpression检查多个属性

题:

如何使用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解决方案.有一些边缘情况解决方案也会失败.我想找到检查两个单独属性而不连接值的正确方法.

注意: 同样要清楚,答案不是你可以从我看到的内容中轻松搜索到的.这似乎是一个非常简单的答案,但事实证明这是相当难以捉摸的.

java spring spring-el spring-boot

10
推荐指数
2
解决办法
2万
查看次数

自定义Spring Boot启动器:如何将i18n消息提供给MessageSource?

我正在编写一个自定义的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)

这将有效.

但是,这需要以下两个方面:

  1. 他们必须手动配置spring.messages.basename属性 - 它不是自动的.和
  2. 它们必须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来为可用消息做出贡献

有可能做我的要求吗?应用程序开发人员最"亲切"的解决方案是什么?

java spring internationalization spring-boot

9
推荐指数
2
解决办法
2万
查看次数

使用jUnit和Mockito进行外部REST API调用的单元测试

我正在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)

java junit spring unit-testing mockito

7
推荐指数
2
解决办法
2万
查看次数

用于Vaadin Web App的简单Java Graphing API

我有一个简单的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应用程序中相对无痛.强烈推荐.

java gwt charts vaadin web

6
推荐指数
1
解决办法
3416
查看次数

如何编写寻找 0 或 null 的 grails 动态查找器

编写正在搜索等于 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() 方法。” 我只是想确定这是否不可能。

grails grails-orm dynamic-finders

5
推荐指数
1
解决办法
698
查看次数

在Chrome中的Vaadin Subwindow中显示嵌入式PDF

我有一个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阅读器配合使用.有没有其他人遇到过这个问题并有任何建议?

java pdf google-chrome vaadin

4
推荐指数
1
解决办法
8264
查看次数

Wordpress分页不起作用

我尝试了多种解决方案,但它无法正常工作.

当我转到/ 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)

wordpress pagination

4
推荐指数
1
解决办法
2万
查看次数

在Groovy中将可变长度字符串散列为12位数字的单向函数

我有由字母,数字和特殊字符(电子邮件地址)组成的唯一可变长度字符串列表.列表中的每个电子邮件地址都是唯一的.

我需要单向散列函数(我不需要能够从生成的数字中检索原始值),它将使用salt散列字符串并生成12位数字.

我想确保唯一性,因此我将检查先前生成的值列表以检测冲突,然后在发生冲突时生成新数字.可预测性不是问题.

理想情况下,我希望这个函数用Groovy编写,但Java也可以.

java random hash groovy

1
推荐指数
1
解决办法
1759
查看次数

Grails力控制器下载文件

我有以下代码:

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 文件。

该代码不会在控制台中创建任何错误,但文件未正确下载。

grails groovy

0
推荐指数
1
解决办法
3525
查看次数