我正在使用Spring RestTemplate
和Jackson 来使用RESTful JSON API .在某些情况下,我们可能会收到一个Status 401
(未经授权的)响应,其中包含由API制造商定义的自定义JSON主体,如下所示:
{
"code": 123,
"message": "Reason for the error"
}
Run Code Online (Sandbox Code Playgroud)
我们需要解析主体,并code
在业务逻辑中使用该属性.
这是我们需要解析的错误响应Java对象:
public class CustomError {
@JsonProperty
private Integer code;
@JsonProperty
private String message;
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}
Run Code Online (Sandbox Code Playgroud)
和自定义错误处理程序执行此操作:
public class CustomErrorHandler extends DefaultResponseErrorHandler {
private RestTemplate restTemplate;
private ObjectMapper objectMapper;
private MappingJacksonHttpMessageConverter messageConverter;
@Override
public boolean hasError(ClientHttpResponse response) throws IOException {
return super.hasError(response);
}
@Override
public void …
Run Code Online (Sandbox Code Playgroud) 我有一个服务项目和一个Web项目.我需要在两个项目中都有eh-cache.
这个想法是,如果服务项目更新,它的缓存相关更改(如密钥和失效规则)也将可用,而不会对Web项目进行任何更改.如此独立,服务项目也可以与其他项目一起使用,甚至不知道eh-cache.
此时,我的Web项目也将eh-cache用于自己的目的.我对eh-cache不太熟悉,我担心这两个项目在部署时可能会发生冲突.我也没有在eh-cache网站上找到相关信息.
您能否为我提供一些如何最好地配置这两个项目的信息,以便我能达到上述要求?
编辑:
我正在使用Spring,因此我更愿意将它用于我的缓存管理器.
我在context.xml中为使用ehcache的每个jar使用以下内容,例如对于jar 1我有:
<ehcache:annotation-driven cache-manager="ehCacheManager1" />
<bean id="ehCacheManager1" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache-1.xml" />
</bean>
Run Code Online (Sandbox Code Playgroud)
我有罐子2
<ehcache:annotation-driven cache-manager="ehCacheManager2" />
<bean id="ehCacheManager2" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache-2.xml" />
</bean>
Run Code Online (Sandbox Code Playgroud)
那么,两个缓存都会起作用吗?我担心ehcache:annotation-driven
上次读取的上下文会覆盖它,只有一个缓存可以运行.我错了,还是错过了什么?
我的问题是关于使用标准.NET配置对象和自定义配置元素(可以通过扩展System.Configuration.ConfigurationSection
类来定义).我们通常从System.Configuration.ConfigurationManager
类的方法中获得这些,GetSection(...)
作为一个例子.
加载的配置对象似乎是一个合并的配置对象,其中包含应用程序配置文件(开发人员可能创建的app.config或web.config文件)中存在的设置以及machine.config文件中定义的内容(后者随.NET Framework安装而来).
因此,我们可以假设首先使用machine.config以分层方式加载配置,并且任何用户定义的配置都覆盖默认设置,并且可以像这样查看:
我的目标是创建多层配置,以便在machine.config和app.config文件之间(如果可能,之后)之间可能存在其他配置文件:
更新
关键是 - 如果我在custom.config和app.config中定义了配置部分,我需要在调用时获得两个配置的合并版本ConfigurationManager.GetSection("MyCustomSection")
.理想情况下,如果我能够按照本MSDN文章中的描述执行合并,那将是很棒的.
通常,我会编写自己的配置管理器类,并尝试尽可能地获得所需的结果,但假设.NET框架对machine.config和app.config有效,我想我可能会受益于框架的内置功能.另外,我不知道如何手动触发这样的合并,如果我确实应该求助于我自己的配置管理器实现.
那么,是否可以利用配置部分/元素与自定义配置文件合并的内置机制?我特别感兴趣的是为自定义配置部分开发和支持它.该System.Configuration
命名空间包含基础对象建立配置部分和元件,以及那些允许有关合并一些设置(如设置适当的ConfigurationElementCollectionType
例如).这些是仅与machine.config(或Web应用程序中的多层web.config文件)合并,还是可以手动触发预加载配置文件的合并?我试图避免在任何自定义配置对象中支持自定义合并,并且可能忘记支持System.Configuration中的现有设置...
更新
根据现有的答案和评论,我想做一个重要的澄清.我能够ConfigurationSection
从当前的应用程序设置(app.config/web.config)和我的custom.config物理文件加载对象.我需要知道是否有机会合并这些对象,而不需要通过框架中的一些内置方法进行反射和逐个属性比较.
注意:我希望能够更好地使用适用于.NET 3.0+的解决方案.如果您的答案针对更高版本的框架,请添加注释.
所以,我正在尝试为用户请求的任何表创建一个通用页面.为此,我试图从服务器获取所有数据,并在客户端没有任何硬编码.
$(document).ready(function(){
/* Add/remove class to a row when clicked on */
$('#table1 tr').on('click', function() {
$(this).toggleClass('row_selected');
} );
var which_table=window.location.pathname;
var which_table_data=which_table.substring(0, which_table.length-1)+'/data';
var table_name=which_table.substring(14, which_table.length-1);
$('#table1').dataTable({
"bProcessing": true,
"bServerSide": true,
"bjQueryUI": true,
"sAjaxSource": which_table_data,
"bPaginate": true,
"sPaginationType": "full_numbers",
"bjQueryUI": true,
"sScrollX":"100%",
"aoColumnDefs": [{
"targets" : [0],
"visible" : false,
"searchable" : false
}]
}).makeEditable({
"sUpdateURL": "../update/" + table_name,
"sAddURL": "../add/" + table_name,
"sDeleteURL": "../delete/" + table_name,
"aoColumns": $.ajax({
dataType: "json",
url: '/get_aoColumns',
data: function (table_name) {
return { …
Run Code Online (Sandbox Code Playgroud) 我需要能够确定给定的方法或属性是否来自特定接口并且是否明确实现.
有没有人这样做,是否有可能通过.NET反射获取此信息?
更新
从下面的评论中可以看出接受的答案,我想要实现的实际事情是通过反射调用实现特定接口的方法.由于可能有多个具有相同方法签名的接口,我想确定基于接口调用的正确实现.在我的场景中,实现类型,接口和方法名称是在运行时确定的,所以我不能在我的情况下使用简单的转换.
我试图以这种方式从文件夹中获取所有文件:
try
{
string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories);
}
catch (UnauthorizedAccessException)
{
throw;
}
Run Code Online (Sandbox Code Playgroud)
如果我的根文件夹包含用户无权访问的文件夹,UnauthorizedAccessException
则会捕获该文件夹并且我的数组为空并且所有递归都失败.
我如何处理这种情况并确保我的代码在没有权限的情况下忽略位置但是从具有权限的位置添加文件?
有谁知道Ehcache的默认密钥生成是如何工作的?如果我有以下方法:
@Cacheable(cacheName = CACHE_KEY) // CACHE_KEY is static final field.
public List<DataObject> list(
int firstRecord, int maxRecords, int pageSize, FilterObject filter) {
....
}
Run Code Online (Sandbox Code Playgroud)
哪里FilterObject
是自定义POJO,我应该期望什么是实际的缓存键?
我观察的是当使用不同的FilterObject
实例而不更改我的方法调用的其他参数时,它总是产生相同的结果 - 第一个调用的结果被缓存并返回.
可能是FilterObject
导致行为的POJO - 我认为它是一些序列化或.toString()
问题,因为我没有覆盖相关方法.
我仍然无法找到有关如何在Ehcache的网站和@Cacheable
注释文档中形成此类方法的缓存密钥的确切信息.我很感激有关此主题的任何信息和建议.
Free MS Windows替换操作系统ReactOS刚刚发布了新版本.他们拥有一支庞大而活跃的开发团队.
是否有可能同一个对象,特别是一个string
或任何原始或非常简单的类型(如a struct
),.GetHashCode()
在不同的机器上调用时产生不同的方法值?
例如,表达式是否可以"Hello World".GetHashCode()
在不同的机器上生成不同的值.我主要是要求C#.NET,但我想这可能适用于Java甚至其他语言?
编辑:
从下面的答案和评论中.GetHashCode()
可以看出,我知道可以覆盖,并且不能保证它在不同版本的框架之间产生的结果.因此,重要的是要澄清我有简单的类型(不能继承,因此GetHashCode()
被覆盖),我在所有机器上使用相同版本的框架.
我有一个使用spring安全性的Web应用程序.它使用<intercept-url ../>
元素来描述不同URL的访问过滤器.默认情况下,这不会考虑url的请求参数.我需要根据请求参数设置url的自定义安全规则.所以我做了以下事情:
1)我创建了一个bean后处理器类,它将为spring安全机制启用请求参数选项:
<beans:beans>
. . .
<beans:bean class="MySecurityBeanPostProcessor">
<beans:property name="stripQueryStringFromUrls" value="false" />
</beans:bean>
. . .
</beans:beans>
Run Code Online (Sandbox Code Playgroud)
和代码:
public class MySecurityBeanPostProcessor implements BeanPostProcessor {
private Boolean stripQueryStringFromUrls = null;
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof DefaultFilterInvocationSecurityMetadataSource && stripQueryStringFromUrls != null) {
((DefaultFilterInvocationSecurityMetadataSource) bean)
.setStripQueryStringFromUrls(stripQueryStringFromUrls.booleanValue());
}
return bean;
}
// code stripped for clarity
}
Run Code Online (Sandbox Code Playgroud)
这应该设置spring安全元数据源以考虑请求参数.我调试了上面的代码,stripQueryStringFromUrls
正在设置属性.
2)在我的安全上下文xml中,我有以下定义:
<intercept-url pattern="/myUrl?param=value" access="!isAuthenticated() or hasRole('ROLE_GUEST')" />
<intercept-url pattern="/myUrl" filters="none" />
...
<intercept-url …
Run Code Online (Sandbox Code Playgroud)