小编pak*_*man的帖子

为什么"final static int"可以用作switch的case常量而不是"final static <your enum>"

为什么这个int开关有效:


public class Foo {
    private final static int ONE = 1;
    private final static int TWO = 2;

    public static void main(String[] args) {
        int value = 1;
        switch (value) {
            case ONE: break;
            case TWO: break;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

虽然这个枚举开关不是:


import java.lang.annotation.RetentionPolicy;

public class Foo {
    private final static RetentionPolicy RT = RetentionPolicy.RUNTIME;
    private final static RetentionPolicy SRC = RetentionPolicy.SOURCE;

    public static void main(String[] args) {
        RetentionPolicy value = RetentionPolicy.RUNTIME;
        switch (value) {
            case RT: break;
            case SRC: …
Run Code Online (Sandbox Code Playgroud)

java enums constants case switch-statement

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

Spring Data REST - POST关系的新实体

相关:Spring Data Rest版本2.0.2

我正在尝试使用@ManyToOne(而不是像示例中的@OneToOne)关系向Person发送实体(地址),如下所述:复杂对象图中的嵌入式实体引用,但我得到了一个Jackson错误:

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: (was java.lang.NullPointerException) (through reference chain: Address["person"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: Address["person"])
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:228) ~[spring-web-4.0.3.RELEASE.jar:4.0.3.RELEASE]
Run Code Online (Sandbox Code Playgroud)

我觉得很奇怪,我可以在Address的"person"属性中发送带有rel和href的JSON对象,如:

"person": {
    "rel" : "people.Person",
    "href" : "http://localhost:8080/people/1"
}
Run Code Online (Sandbox Code Playgroud)

这仍然有效吗?提到的页面很旧(2012年).有没有更新的文档.我已经审查了参考文档,即使是最新的(迄今为止)2.1.0 RC1,但我发现它缺乏.

任何指针都会受到赞赏.

Stackoverflow建议我看看这个问题,在我的情况下失败的HTTP状态405 - 不支持请求方法'POST'...这可能是一个配置问题,但我原来的问题代表.

更新1:从参考文档部分4.1中它说:

有时,Spring Data REST的ObjectMapper的行为可能无法正确处理您的域模型,该行为已经专门配置为使用可以将域对象转换为链接并再次返回的智能序列化程序.可以通过很多方式构建数据,您可能会发现自己的域模型未正确转换为JSON.在这些情况下,尝试以通用方式支持复杂域模型有时也不实用.有时,根据复杂性,甚至不可能提供通用解决方案.

问题可能是我正在使用支持Hibernate的自定义Jackson ObjectMapper.我会尝试进一步挖掘.

更新2:没关系更新1,我删除了Hibernate4Module,行为是一样的.

rest spring jpa jackson spring-data-rest

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

带有AOP拦截器的Spring 3 MVC @Controller?

任何人都知道为什么显然不可能将AOP与带注释的MVC控制器一起使用?(见邮政).我有一个@Controller,一旦我添加切入点就会停止工作.问题不在于拦截器没有被调用,而是@Controller只是停止工作(在日志中你可以看到,而不是"映射的URL路径[/ xx]到处理器'Yyy'"你得到一个"没有URL"确定的路径").

我知道有一种通过handlerMapping向控制器添加拦截器的机制,但我的问题是特定于AOP拦截器.注释控制器只是在Spring容器中像任何其他pojo一样pojos吗?有什么不同?为什么?

@Controller
@RequestMapping("/user")
public class RestTestImpl implements RestTest {
    @RequestMapping(value="/", method={RequestMethod.GET})
    public @ResponseBody String deleteUsers(String arg) {
        return "Xxxxx";
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的servlet-Context中我有:

<context:component-scan base-package="org.xxx.yyy"></context:component-scan>
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    . . .
</bean>
Run Code Online (Sandbox Code Playgroud)

一切都很好.

但是当我添加:

    <aop:config>
        <aop:pointcut expression="execution(* org.xxx.*(..))" id="pc1"/>
        <aop:advisor advice-ref="hibernateInterceptor"  pointcut-ref="pc1" order="2" />
    </aop:config>
Run Code Online (Sandbox Code Playgroud)

控制器停止作为控制器(没有错误,只是它停止绑定到指定的URL)!

java spring controller spring-mvc spring-aop

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

我应该在 C 中的 basename/dirname 之后释放 strdup 指针吗?

我想使用 POSIX 的basename功能(而不是 GNU 的)。

从手册页:

dirname() 和 basename() 都可以修改 path 的内容,因此在调用这些函数之一时可能需要传递一个副本。

这些函数可能会返回指向静态分配的内存的指针,这些内存可能会被后续调用覆盖。 或者,它们可能会返回指向 path 某些部分的指针,以便在不再需要函数返回的指针之前,不应修改或释放 path 引用的字符串。

它还说:

返回值
dirname() 和 basename() 都返回指向以空字符结尾的字符串的指针。(不要将这些指针传递给 free (3)。)

因此,该示例建议如下:

例子

       char *dirc, *basec, *bname, *dname;
       char *path = "/etc/passwd";

       dirc = strdup(path);
       basec = strdup(path);
       dname = dirname(dirc);
       bname = basename(basec);
       printf("dirname=%s, basename=%s\n", dname, bname);
Run Code Online (Sandbox Code Playgroud)

strdupstrndup)手册页说:

新字符串的内存通过 malloc(3) 获得,并且可以通过 free(3) 释放。

所以问题是:我应该释放 dirc 和 basec(按照strdup)还是不释放(按照basename)?

c memory string malloc strdup

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

@ControllerAdvice 与 @Autowired 依赖项未注入

任何人都知道如何将依赖项注入@ControllerAdvice?

我的@ControllerAdvice扩展了Spring的ResponseEntityExceptionHandler并且没有实现任何接口。

@ControllerAdvice 被正确调用,但 @Autowired 依赖项从未被注入。没有启动注入错误,依赖项只是空的。

我想这与 Spring 如何使用 cglib 代理 @ControllerAdvice 以使 @Autowired 注释丢失有关。

我通过实现一个接口进行测试,这样Spring可以创建一个JDK代理,但它也不起作用。实际上,对于一个接口,它甚至根本没有被调用......即使我也用 @ControllerAdvice 注释该接口。

有没有办法指定 Spring 在特定情况下应使用 JDK 代理?

编辑:顺便说一句,我正在使用 Spring 3.2.4.RELEASE。

示例类:

@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {

    @Autowired(required = true)
    public AuditService auditService;

    @ExceptionHandler(value = { RuntimeException.class })
    public final ResponseEntity<Object> handleRuntimeException(Exception ex, WebRequest request) {
        // auditService is null here!
    }

}
Run Code Online (Sandbox Code Playgroud)

spring dependency-injection proxy-classes cglib

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

注释Spring @Controller也作为Bean?

注释的Spring MVC控制器是否也可以使用@ Component/@ Service类型的注释进行注释,并且既可以用作控制器,也可以用作bean?

java spring controller spring-mvc

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