小编and*_*ucz的帖子

在单元测试Spring REST控制器时注入@AuthenticationPrincipal

我在尝试测试一个接收an UserDetails作为参数注释的休息端点时遇到了麻烦@AuthenticationPrincipal.

似乎没有使用在测试场景中创建的用户实例,但是尝试使用默认构造函数进行实例化: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.andrucz.app.AppUserDetails]: No default constructor found;

REST端点:

@RestController
@RequestMapping("/api/items")
class ItemEndpoint {

    @Autowired
    private ItemService itemService;

    @RequestMapping(path = "/{id}",
                    method = RequestMethod.GET,
                    produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public Callable<ItemDto> getItemById(@PathVariable("id") String id, @AuthenticationPrincipal AppUserDetails userDetails) {
        return () -> {
            Item item = itemService.getItemById(id).orElseThrow(() -> new ResourceNotFoundException(id));
            ...
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

测试类:

public class ItemEndpointTests {

    @InjectMocks
    private ItemEndpoint itemEndpoint;

    @Mock
    private ItemService itemService;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this); …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-security spring-test

17
推荐指数
3
解决办法
8626
查看次数

使用Spring缓存处理Java 8可选

考虑一个可以插入和检索对象并使用Spring缓存抽象的服务类,如何以返回Optional的方式注释方法?

class MyServiceImpl implements MyService {

    private static final String CACHE_NAME = "itemCache";      

    @Override
    @Cacheable(CACHE_NAME)
    public Optional<Item> findById(Long id) {
        // access the repository to retrieve the item
    }

    @Override
    @CachePut(cacheNames = CACHE_NAME, key = "#item.id")
    public Item insertItem(Item item) {
        ...
    }

}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,ClassCastException抛出了a ,因为insertItemItem实例放入缓存中,并findById期望Optional可能包含Item实例.

java spring spring-cache

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

左连接表达式和Oracle返回的行数

使用左连接的查询不返回记录,尽管左表中的where子句应该找到单个记录.在这种情况下,它应该返回一个记录,其中左表中的字段包含值,右表中的字段为null,因为它们之间没有匹配.

显然,使用引用连接表达式上的右表的大小写存在问题.

在SQL Server中,相同的查询按预期工作.

select 
  t1.Description, t2.Description
from 
  A t1 
left join 
  B t2 
on
  t1.Id = t2.Id and
  1 = case when (
    t2.Id = t2.Id and 
    (select t3.Flag from C t3 where t3.ID_B = t2.Id) = 'S'
  ) then 1 else 0 
  end
where t1.Id = 1
Run Code Online (Sandbox Code Playgroud)

结果:未返回任何行.

然后我移动了表达式t2.Id = t2.Id(这里只是为了演示问题,并且应该总是返回true,显然)在case表达式之外.

select 
  t1.Description, t2.Description
from 
  A t1 
left join 
  B t2 
on
  t1.Id = t2.Id and
  t2.Id = t2.Id and 
  1 = case when ( 
    (select …
Run Code Online (Sandbox Code Playgroud)

sql oracle join left-join relational-database

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

动态XML标记和JAXB

如何使用JAXB序列化和反序列化下面的XML,考虑到标签complement1,23不是必需的XML可能有complement4,5,n

我想过使用@XmlAnyElement注释,但我需要知道值"First"属于第一个补码,"Second"属于第二个补码,等等.

<resource>
    <id>Identifier</id>
    <name>Name</name>
    <complement1>First</complement1>
    <complement2>Second</complement2>
    <complement3>Third</complement3>
</resource>
Run Code Online (Sandbox Code Playgroud)

java xml jaxb

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

测试两个二叉树是否相等

我知道这可能是一个重复的帖子,但我会提交你自己的代码.我写了以下递归过程,但我想优化它.我想在找到与其他节点不同的节点时立即停止treeCompare方法,而不是比较所有节点.

在此先感谢您的帮助.

这是我的瘦Node类:

public class Node {
    public Node father;
    public Node left;
    public Node right;
}
Run Code Online (Sandbox Code Playgroud)

这是我的比较方法:

private boolean treeCompare(Node firstNode, Node secondNode) {
    if (firstNode == null && secondNode == null)
        return true;
    else if (firstNode == null || secondNode == null)
        return false;

    boolean isLEquals = treeCompare(firstNode.left, secondNode.left);
    boolean isREquals = treeCompare(firstNode.right, secondNode.right);

    return firstNode.equals(secondNode) && isLEquals && isREquals;
}
Run Code Online (Sandbox Code Playgroud)

java algorithm tree recursion

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