小编She*_*riy的帖子

Linq中的动态订单

我有一个访问数据库的应用程序,必须根据输入按不同的字段排序结果.

这是我的排序功能:

IQueryable<Entity> GetSortedData(IQueryable<Entity> result, String orderby, bool desc)
{
   switch (orderby.ToLower())
   {
     case "id":
       result = result.OrderBy(c => c.Id);
       break;

     case "code":
       result = result.OrderBy(c => c.Code);
       break;

     case "active":
       result = result.OrderBy(c => c.Active);
       break;

     default:
       result = result.OrderBy(c => c.Name);
       break;
   }

   if (pageData.SortDesc)
   {
     var res = result.ToList();
     res.Reverse();
     return res.AsQueryable();
   }

   return result;      
}
Run Code Online (Sandbox Code Playgroud)

这段代码存在一些我不喜欢的问题:

  1. 重复的代码太多了.如果它是"纯粹的SQL"查询,它看起来像

    SELECT*FROM data_table ORDER BY CASE @OrderBy WHEN'id'Then id when'code'THEN code WHEN'active'THEN
    active ELSE name
    END;

  2. 转换为列表并返回以进行反转.我不能改变返回值类型,我绝对不想写更无用的代码(基本上是翻倍switch …

c# linq

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

Gson中有JsonFormat的类似物吗?

我的问题很小:

相比 fastrxml.jackson,我更喜欢 Gson。我希望在 Gson 中看到的一个可能的功能是:

//some code
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss")
private Date endDate;
//some code
Run Code Online (Sandbox Code Playgroud)

我发现在 Gson 中做同样事情的唯一方法是:

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();
Run Code Online (Sandbox Code Playgroud)

我认为注释比上面的初始化更容易理解。有什么方法可以注释或创建一些属性以便代码

gson.fromJson("\"{\\\"Id\\\": 703,\\\"StartDate\\\": \\\"2019-10-01T00:00:00\\\"," +
    " \\\"EndDate\\\": \\\"2019-10-25T00:00:00\\\",\\\"Title\\\": \\\"exmample title\\\"}\"",
  MyObj.class)
Run Code Online (Sandbox Code Playgroud)

将生成 MyObj 类的对象:

public class MyObj{
    @SerializedName("Id")
    private Long id;
    @SerializedName("StartDate")
    //analogue of JsonFormat????
    private Date startDate;
    @SerializedName("EndDate")
    //analogue of JsonFormat????
    private Date endDate;
    @SerializedName("Title")
    private String title;
}
Run Code Online (Sandbox Code Playgroud)

java json gson

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

如果 @RequestBody 中不存在,则 boolean 设置为 false

我偶然发现了一个有趣的案例,但我不知道如何解决它。这可能与布尔字段的 JSON Post 请求默认发送 false有关,但该文章的建议没有帮助。

假设我有这门课:

public class ReqBody {
    @NotNull
    @Pattern(regexp = "^[0-9]{10}$")
    private String phone;
    //other fields
    @NotNull
    @JsonProperty(value = "create_anonymous_account")
    private Boolean createAnonymousAccount = null;
    //constructors, getters and setters
    public Boolean getCreateAnonymousAccount() {
        return createAnonymousAccount;
    }

    public void setCreateAnonymousAccount(Boolean createAnonymousAccount) {
        this.createAnonymousAccount = createAnonymousAccount;
    }
}
Run Code Online (Sandbox Code Playgroud)

我也有端点:

@PostMapping(value = "/test", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<MyOutput> test(
            @ApiParam(value = "information", required = true) @RequestBody ReqBody input
    ) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

问题是当我将请求正文发送为:

{
"phone": "0000000006",
 "create_anonymous_account": …
Run Code Online (Sandbox Code Playgroud)

java rest spring-boot

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

标签 统计

java ×2

c# ×1

gson ×1

json ×1

linq ×1

rest ×1

spring-boot ×1