小编Imr*_*ran的帖子

集成测试和spring应用程序事件

我有一个弹簧控制器,它可以激活一个ApplicationEvent

@RestController
public class VehicleController {

@Autowired
private VehicleService service;

@Autowired
private ApplicationEventPublisher eventPublisher;

@RequestMapping(value = "/public/rest/vehicle/add", method = RequestMethod.POST)
public void addVehicle(@RequestBody @Valid Vehicle vehicle){
    service.add(vehicle);
    eventPublisher.publishEvent(new VehicleAddedEvent(vehicle));
    }
}
Run Code Online (Sandbox Code Playgroud)

我对控制器进行了集成测试,例如

    @RunWith(SpringRunner.class)
    @WebMvcTest(controllers = VehicleController.class,includeFilters = @ComponentScan.Filter(classes = EnableWebSecurity.class))
    @Import(WebSecurityConfig.class)

public class VehicleControllerTest {
@Autowired
private MockMvc mockMvc;

@MockBean
private VehicleService vehicleService;

@Test
public void addVehicle() throws Exception {
    Vehicle vehicle=new Vehicle();
    vehicle.setMake("ABC");
    ObjectMapper mapper=new ObjectMapper();
    String s = mapper.writeValueAsString(vehicle);

    given(vehicleService.add(vehicle)).willReturn(1);

    mockMvc.perform(post("/public/rest/vehicle/add").contentType(
            MediaType.APPLICATION_JSON).content(s))
            .andExpect(status().isOk());
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我删除事件发布行,测试成功.但是,对于该事件,它会发生错误.

org.springframework.web.util.NestedServletException: Request …
Run Code Online (Sandbox Code Playgroud)

junit spring integration-testing mockito

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

Spring属性文件与系统属性

这是一个奇怪的问题,但是将变量定义为系统属性有什么优点,例如,

 System.getProperty("files-dir", System.getProperty("user.home") + "/uploaded-files");
Run Code Online (Sandbox Code Playgroud)

在 Spring 应用程序属性中定义它。什么是更优选的?

java spring spring-boot

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

SpringBoot @WebMvcTest安全问题

我有一个spring rest mvc控制器,它有url"/ public/rest/vehicle/get".在我的安全配置中,我已经定义了对/ public/rest的任何请求都不应该要求身份验证.

    http.
             csrf().disable()
            .authorizeRequests()
            .antMatchers("/home/**", "/**", "/css/**", "/js/**", "/fonts/**", "/images/**", "/public/rest/**","/login*","/signin/**","/signup/**").permitAll()
            .antMatchers("/property/**").authenticated()
            .and()
            .formLogin().loginPage("/login").permitAll()
            .and().httpBasic().disable();
Run Code Online (Sandbox Code Playgroud)

当我启动我的应用程序并使用浏览器或任何其他方式提交请求时,此配置正常工作.现在,我有一个看起来像这样的测试类,

@RunWith(SpringRunner.class)
@WebMvcTest(VehicleController.class)
public class VehicleControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private VehicleService vehicleService;


    @Test
    public void getVehicle() throws Exception {
       given(this.vehicleService.get(0)).
               willReturn(new VehicleEquipmentDTO());
        this.mockMvc.perform(get("/public/rest/vehicle/get").param("id","0"))
                .andDo(print())
                .andExpect(status().isOk());//.andExpect(content().string("Honda Civic"));
    }}
Run Code Online (Sandbox Code Playgroud)

现在,当我运行这个测试时,它说

java.lang.AssertionError: Status 
Expected :200
Actual   :401
Run Code Online (Sandbox Code Playgroud)

当我打印请求响应时,我发现它因为安全性而抱怨."错误消息=访问此资源需要完全身份验证" 任何想法,为什么它不使用我的安全配置,以及强制它使用正确配置的工作是什么?提前致谢

java rest spring mockmvc

4
推荐指数
3
解决办法
3746
查看次数

Spring Rest端点和服务层分离

在Spring Boot应用程序中,我有两个服务:GroupService和UserService。还有各自的模型类Group和User以及存储库。我将公开两个Rest端点,一个用于用户,一个用于组。现在,我有了一个端点,它将给定用户添加到给定组中,如下所示,现在忘记了可能的空检查和其他问题。

@PostMapping(path="groups/{group-id}/add/{user-id}")
public ResponseEntity<Group> setUserGroup(@PathVariable(value="group-id")Long groupId, @PathVariable(value="user-id")Long userId)
    {   Group group=groupService.findById(groupId);
        group.addUser(userService.findById(userId));
        return new ResponseEntity<Group>(groupService.save(group),HttpStatus.OK);
    }
Run Code Online (Sandbox Code Playgroud)

现在的问题是,处理这种情况的最佳实践是什么。通过在组服务中注入用户服务来处理组服务中的逻辑,而不是在其余端点中处理它,这不是很好吗?在那种情况下,组服务将依赖于用户服务,但是如果(让我们想像这样的情况)多个其余端点需要,则至少可以重用该逻辑。

当前的实现具有优势,因为服务不会变得相互依赖。但是,如果我们具有复杂的逻辑,并且可以说我们具有复杂的事务,那么肯定没有合适的休息端点来处理它。请帮助我了解我应该使用哪种方法以及什么是行业最佳实践。

rest spring

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

引起:org.springframework.jms.support.converter.MessageConversionException:在消息上找不到类型id属性[_type]

我正在尝试这个春天的JMS样本,它给出了错误. https://spring.io/guides/gs/messaging-jms/ 引起:org.springframework.jms.support.converter.MessageConversionException: Could not find type id property [_type] on message from destination [queue://mailbox] 有趣的是,如果我克隆它并运行一切运行正常.如果我复制并粘贴,则会出错.

 @Bean // Serialize message content to json using TextMessage
public MessageConverter jacksonJmsMessageConverter() {
    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
    converter.setTargetType(MessageType.TEXT);
    converter.setTypeIdPropertyName("_type");
    return converter;
}
Run Code Online (Sandbox Code Playgroud)

这段代码实际上导致了错误.搜索网络和文档,我仍然不知道如何设置setTypeIdPropertyName值以及如何设置"_type"它在此项目中引用的内容?由于消息没有这样的属性,那么它来自哪里?

java jackson jsm spring-boot

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

SpringBoot兔子连接超时问题

我的春季启动应用程序抛出连接超时错误,它永远无法连接.我看到的另一个有趣的问题是,它永远不会获取spring app属性中定义的连接超时属性.

  org.springframework.amqp.AmqpTimeoutException: java.util.concurrent.TimeoutException
    at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:74) ~[spring-rabbit-1.6.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:309) ~[spring-rabbit-1.6.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:577) ~[spring-rabbit-1.6.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1431) ~[spring-rabbit-1.6.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1412) ~[spring-rabbit-1.6.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1388) ~[spring-rabbit-1.6.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:336) ~[spring-rabbit-1.6.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.redeclareElementsIfNecessary(SimpleMessageListenerContainer.java:1123) [spring-rabbit-1.6.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$800(SimpleMessageListenerContainer.java:98) [spring-rabbit-1.6.7.RELEASE.jar:na]
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1329) [spring-rabbit-1.6.7.RELEASE.jar:na]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91]
Caused by: java.util.concurrent.TimeoutException: null
    at com.rabbitmq.utility.BlockingCell.get(BlockingCell.java:76) ~[amqp-client-3.6.5.jar:na]
    at com.rabbitmq.utility.BlockingCell.uninterruptibleGet(BlockingCell.java:110) ~[amqp-client-3.6.5.jar:na]
    at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) ~[amqp-client-3.6.5.jar:na]
    at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:366) ~[amqp-client-3.6.5.jar:na]
    at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:292) ~[amqp-client-3.6.5.jar:na]
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:824) ~[amqp-client-3.6.5.jar:na]
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:736) ~[amqp-client-3.6.5.jar:na]
    at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:293) ~[spring-rabbit-1.6.7.RELEASE.jar:na]
    ... 9 common frames omitted
Run Code Online (Sandbox Code Playgroud)

这是我的java配置,

    @Configuration
@EnableRabbit
public class RabbitConfig {

    private final String …
Run Code Online (Sandbox Code Playgroud)

java spring rabbitmq spring-boot

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

java库中的以下哪个类没有实现设计模式?

今天,我遇到了这个奇怪的面试问题.java库中的以下哪个类没有实现设计模式?

  1. 独生子
  2. 观察
  3. 迭代器
  4. 代理

有人有线索吗?我怀疑问题的正确性,但想知道社区意见.如果有一些我不知道的事情,因为没有一个选项有意义.

java design-patterns

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