我在尝试测试一个接收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) 考虑一个可以插入和检索对象并使用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 ,因为insertItem
将Item
实例放入缓存中,并findById
期望Optional
可能包含Item
实例.
使用左连接的查询不返回记录,尽管左表中的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) 如何使用JAXB序列化和反序列化下面的XML,考虑到标签complement1
,2
而3
不是必需的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) 我知道这可能是一个重复的帖子,但我会提交你自己的代码.我写了以下递归过程,但我想优化它.我想在找到与其他节点不同的节点时立即停止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 ×4
spring ×2
algorithm ×1
jaxb ×1
join ×1
left-join ×1
oracle ×1
recursion ×1
spring-cache ×1
spring-mvc ×1
spring-test ×1
sql ×1
tree ×1
xml ×1